Асинхронное перенаправление ответа в пользовательском HttpHandler ASP.Net MVC 5 - PullRequest
0 голосов
/ 13 сентября 2018

Когда ответ перенаправляется через Task aync и await. Перенаправление не видно на стороне клиента (браузер). Браузер всегда ждет ответа. По сути, я создал собственный HttpHandler, который также возвращает MVCHandler, поэтому он вызывает

IAsyncResult BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, object state)

Я переопределил этот метод для перенаправления, но перенаправление происходит через другой поток (или что-то).

protected override IAsyncResult BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, object state)
    {
        if (_hasPermission)
        {
            return base.BeginProcessRequest(httpContext, callback, state);
        }
        else
        {
            return DisplayError(httpContext.Response);
        }
    }

 public async Task DisplayError(HttpResponse _response)
    {
        Task.Run(() =>
        {
            _response.RedirectToRoute("Unauthorized");
        }).RunSynchronously();
    }

Я также попытался сделать это синхронно, написав выше и другой метод. Но все та же проблема. Есть ли способ исправить это Или предотвращение MVCHandler для вызова ProcessRequest вместо BeginProcessRequest метода?

1 Ответ

0 голосов
/ 14 сентября 2018

Конкретная технология, используемая для реализации кода вашего сервера HTTP (.NET / C #), в этом случае не меняет протокол HTTP.

Вы можете изменить способ работы на сервере (async-await), но вы не можете разбить конвейер.

...