C # ASP.NET MVC RestAPI: Обрабатывать заголовки до получения тела и параметров - PullRequest
1 голос
/ 11 декабря 2019

Обычно в сетевых протоколах заголовок запроса предварительно обрабатывается, а затем тело запроса обрабатывается впоследствии. В случае HTTP я не уверен, но я хочу знать, есть ли какие-либо методы для обработки заголовка перед телом запроса и его параметров?

Если говорить в C #, есть ли методы для обработки заголовка запроса перед контроллеромметод запускается или нет?

Если ответ положительный, я хочу отправить версию клиента на мой сервер и, если они не совпадают, отправив клиенту подходящий ответ. Я хочу сделать это, поскольку может случиться так, что тело моего запроса будет большим (например, 10 МБ), и я хочу предварительно обработать заголовок, прежде чем ждать получения полного HTTP-запроса.

1 Ответ

1 голос
/ 11 декабря 2019

Ответ - да, вы можете использовать фильтры действий. https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-3.1#action-filters

public class MySampleActionFilter : IActionFilter
{
    public void OnActionExecuting (ActionExecutingContext context)
    {
        // Do something before the action executes.
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // Do something after the action executes.
    }
}

В соответствии с документацией вы можете переопределить контекст действия и замкнуть результат, не заходя в контроллер.

Result - настройка Result приводит к короткому замыканию выполнения метода действия и последующих фильтров действия.

Вы можете найти такие заголовки, как этот

var headers = context.HttpContext.Request.Headers;

// Ensure that all of your properties are present in the current Request
if(!String.IsNullOrEmpty(headers["version"])
{
     // All of those properties are available, handle accordingly

     // You can redirect your user based on the following line of code
     context.Result = new RedirectResult(url);
}
else
{
     // Those properties were not present in the header, redirect somewhere else
}
...