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

时间:2019-01-02 20:31:33

标签: c# asp.net-core routing asp.net-core-webapi

我正在使用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")]描述的参数名称。

2 个答案:

答案 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中获得一部分。我不确定这是完整的还是部分内容。