在MVC 5中,您可以从
获取RouteDataHttpContext.Current.Request.RequestContext.RouteData
在MVC 6中,我想获取RouteData,我必须从以下位置访问它:
IHttpContextAccessor httpContextAccessor
但它没有路线词典属性。
我如何在MVC 6中执行此操作?
答案 0 :(得分:2)
我在https://github.com/aspnet/Mvc/issues/3826
处找到了解决方案string parameter = "action" // or controller
_httpContextAccessor.HttpContext.GetRouteValue(parameter);
答案 1 :(得分:1)
它可以在任何Filter内提取,但它可能在ResourceFilter中最有意义。所有各种过滤器'*Context
对象都继承自您正在寻找RouteData
属性的ActionContext
。从那里,您可以将其复制到HttpContext
上的Items
集合(方便地,也可以在过滤器的*Context
对象上使用),以便在调用管道的其他代码中使用。< / p>
以下示例通过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"];