Как читать параметры URI, используя HttpContextAccessor в ASP.NET Core - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь прочитать параметры URL, отправленные в метод действия WEB API, используя интерфейс IHttpContextAccessor и его реализацию по умолчанию HttpContextAccessor из DelegatingHandler.

Контроллер выглядит следующим образом:

[HttpPost("{siteName}/{accountID}")]
public async Task<ActionResult<AirRequest>> Post(AirCModel model, string siteName, string accountID)
{

}

Я хочу прочитать значение {siteName} / {accountID} в DelegatingHandler

public class AuthenticationDelegatingHandler : DelegatingHandler
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public AuthenticationDelegatingHandler(IHttpContextAccessor httpContextAccessor)
    {      
        _httpContextAccessor = httpContextAccessor;
    }

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var siteNAme = _httpContextAccessor ???
    }
}

в файле Startup.cs. Я внедрил службу HttpContext:

public void ConfigureServices(IServiceCollection services)
{                   
    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    services.AddHttpContextAccessor();
}

1 Ответ

0 голосов
/ 05 июня 2019

Вы можете извлечь HttpContext RouteData, вызвав метод расширения GetRouteData, а затем прочитать отдельные значения оттуда.Вот пример:

var routeData = _httpContextAccessor.HttpContext.GetRouteData();
var siteName = routeData.Values["siteName"];
var accountID = routeData.Values["accountID"];

Метод расширения GetRouteData находится в пространстве имен Microsoft.AspNetCore.Routing, поэтому вам может потребоваться добавить using Microsoft.AspNetCore.Routing; соответственно.

...