Как я могу получить IActionContextAccessor из Endpoint.RequestDelegate при использовании маршрутизации Endpoint и MVC? - PullRequest
2 голосов
/ 24 января 2020

Я получил приложение asp. net core 3.1 и настроил MVC и маршрутизацию конечной точки. Предположим, у меня есть объект Endpoint (он не всегда будет конечной точкой, связанной с текущим запросом), тогда у меня будет его RequestDelegate. Я хотел бы получить IActionContextAccessor из этого RequestDelegate. В следующем примере, когда я нахожусь в режиме отладки, я вижу _actionContextAccessor, поэтому я знаю, что он там.

var endpoint = this.httpContextAccessor.HttpContext.GetEndpoint();

enter image description here

Я Я уверен, что вам нужно больше контекста того, что я делаю, и я могу дать вам больше, если хотите, но суть этого вопроса в том, чтобы предположить, что у меня есть объект Endpoint, и я настроен на использование MVC, как я могу это сделать? получить IActionContextAccessor?

ОБНОВЛЕНИЕ

В конечном итоге я пытаюсь получить параметры действий. Просто тип входных параметров. Мы придерживаемся соглашения об одной модели ввода, поэтому на самом деле я хочу, чтобы этот тип входной модели.

1 Ответ

3 голосов
/ 24 января 2020

Чтобы определить тип параметров действия, нет необходимости использовать IActionContextAccessor или свойство ActionContext, которое оно предоставляет. Экземпляр Endpoint содержит набор метаданных: для конечной точки, представляющей действие, он содержит экземпляр ActionDescriptor, который, что неудивительно, описывает действие. Одним из его свойств является Parameters, которое предоставляет набор параметров для этого действия.

Собрав все это вместе, вот пример того, как получить тип отдельного параметра действия, как было запрошено:

var actionDescriptor = endpoint.Metadata.GetMetadata<ActionDescriptor>();

if (actionDescriptor != null)
{
    var actionParameterType = actionDescriptor.Parameters.SingleOrDefault()?.ParameterType;

    // ...
}
...