在课堂上获取路线数据

问题描述 投票:2回答:2

在MVC 5你可以从的RouteData

HttpContext.Current.Request.RequestContext.RouteData

在MVC 6,我想获得的RouteData,我不得不从访问:

IHttpContextAccessor httpContextAccessor

但它不具备路由字典属性。

如何在MVC 6做到这一点?

c# asp.net-core asp.net-core-mvc
2个回答
1
投票

它可以在任何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"];

2
投票

我发现这里的解决方案https://github.com/aspnet/Mvc/issues/3826

string parameter = "action" // or controller
_httpContextAccessor.HttpContext.GetRouteValue(parameter);
© www.soinside.com 2019 - 2024. All rights reserved.