我正在使用ActionFilter,需要获取/api/v{version}/controllerName/actionName/{parameter}
之类的URL模板路径。但是,该解决方案必须是通用的,因此它支持多种URL模式,例如api/v{version}/controllerName/actionName/{parameter}/otherActionName/{otherParameter}
。
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")]
描述的参数名称。
答案 0 :(得分:1)
您可以从ActionExecutedContext
的ResourceFilter中获取模板路径。如果您需要QueryString
解决问题,或者在ActionArguments
类型的上下文中有Dictionary<string, object>
,其中包含与请求一起传递的所有参数。
//template
string template = context.ActionDescriptor.AttributeRouteInfo.Template;;
//arguments
IDictionary<string, object> arguments = context.ActionArguments;
//query string
string queryString= context.HttpContext.Request.QueryString.Value;
希望这会有所帮助:)
答案 1 :(得分:0)
您可以从context.ActionDescriptor.AttributeRouteInfo
中获得一部分。我不确定这是完整的还是部分内容。