它可以在任何Filter内提取,尽管它可能在ResourceFilter中最有意义。所有各种过滤器的“*Context
”对象都继承了相同的ActionContext
,它具有您要查找的RouteData
属性。从那里,您可以将它复制到HttpContext
上的Items
集合(方便地,也可在筛选器的*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"];
我会建议增加一些扩展方法,以及以避免魔术字符串和运行投入使用这个路由值,但我离题了。 – Technetium