Как получить путь к шаблону URL в ASP.NET Core? - PullRequest
0 голосов
/ 02 января 2019

Я работаю над ActionFilter и мне нужно получить путь к шаблону URL, например /api/v{version}/controllerName/actionName/{parameter}.Однако решение должно быть универсальным, поэтому оно поддерживает несколько шаблонов 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 голосов
/ 03 января 2019

Вы можете получить путь к шаблону из вашего 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;

Надеюсь, это поможет:)

0 голосов
/ 02 января 2019

Вы можете получить часть этого от context.ActionDescriptor.AttributeRouteInfo. Я не уверен на 100%, будет ли это полностью или частично.

...