我正在开发ActionFilter,需要获得类似/api/v{version}/controllerName/actionName/{parameter}
的URL模板路径。但是,该解决方案需要是通用的,以便支持api/v{version}/controllerName/actionName/{parameter}/otherActionName/{otherParameter}
等多种URL模式。
ASP.NET Core 2.2最新稳定版。我所拥有的是ActionExecutedContext
,它也包含HttpContext
。但是,我不确定这个HttpContext
的内容,因为它包含一些响应的默认值。
private PathString GetUrlTemplatePath(ActionExecutedContext context)
{
// TODO:
return context.HttpContext.Request.Path;
}
实际结果:/api/v1/Location/addresses/999999A1-458A-42D0-80AA-D08A3DAD8199
。
预期结果:/api/v{version}/location/addresses/{externalId}
,其中externalId
是由属性[HttpGet("addresses/{externalId}", Name = "GetAddress")]
描述的参数的名称。
您可以从ResourceFilter中获取ActionExecutedContext
中的模板路径。如果您的问题需要QueryString
,或者类型Dictionary<string, object>
的上下文中有ActionArguments
,它包含随请求传递的所有参数。
//template
string template = context.ActionDescriptor.AttributeRouteInfo.Template;;
//arguments
IDictionary<string, object> arguments = context.ActionArguments;
//query string
string queryString= context.HttpContext.Request.QueryString.Value;
希望这有帮助:)
您可以从context.ActionDescriptor.AttributeRouteInfo
中获取其中的一部分。我不能100%确定这是完整的还是只是其中的一部分