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