如何在ASP.NET Core中获取URL模板路径



我正在开发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%确定这是完整的还是只是其中的一部分

相关内容

  • 没有找到相关文章

最新更新