在MVC 5你可以从的RouteData
HttpContext.Current.Request.RequestContext.RouteData
在MVC 6,我想获得的RouteData,我不得不从访问:
IHttpContextAccessor httpContextAccessor
但它不具备路由字典属性。
如何在MVC 6做到这一点?
它可以在任何Filter内被提取,但它可能使在ResourceFilter最有意义。所有不同的过滤器*Context
对象从具有您正在寻找的ActionContext
属性相同RouteData
继承。从那里,你可以将它复制到Items
收集的HttpContext
(方便起见,也可在过滤器的*Context
对象等),让其他代码使用进一步下跌的调用管道。
下面是通过在一个所述ResourceExecutingContext
提取ResourceFilter它的例子。
public class ExtractRouteValueResourceFilter : IAsyncResourceFilter {
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) {
var value = context.RouteData.Values["key"];
if (value != null) {
context.HttpContext.Items["key"] = value;
}
await next();
}
}
如果您的过滤器后,运行任何代码,你可以通过现在像这样的IHttpContextAccessor
访问路径值:
var routeValue = accessor.HttpContext.Items["key"];
我发现这里的解决方案https://github.com/aspnet/Mvc/issues/3826
string parameter = "action" // or controller
_httpContextAccessor.HttpContext.GetRouteValue(parameter);