在课堂上获取路线数据

时间:2017-08-02 20:29:19

标签: c# asp.net-core asp.net-core-mvc

在MVC 5中,您可以从

获取RouteData
HttpContext.Current.Request.RequestContext.RouteData

在MVC 6中,我想获取RouteData,我必须从以下位置访问它:

IHttpContextAccessor httpContextAccessor

但它没有路线词典属性。

我如何在MVC 6中执行此操作?

2 个答案:

答案 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"];