2017-08-02 82 views

回答

1

它可以在任何Filter内提取,尽管它可能在ResourceFilter中最有意义。所有各种过滤器的“*Context”对象都继承了相同的ActionContext,它具有您要查找的RouteData属性。从那里,您可以将它复制到HttpContext上的Items集合(方便地,也可在筛选器的*Context对象上使用),以便在调用管道之后的其他代码中使用。

下面是一个通过ResourceExecutingContextResourceFilter中提取它的示例。

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"]; 
+1

我会建议增加一些扩展方法,以及以避免魔术字符串和运行投入使用这个路由值,但我离题了。 – Technetium