0

当响应通过任务 aync 重定向时,在客户端(浏览器)上看不到 await.Redirection。浏览器总是在等待响应。基本上我创建了一个自定义 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方法?

4

1 回答 1

0

在这种情况下,用于实现 HTTP 服务器代码 (.NET/C#) 的特定技术不会更改 HTTP 协议。

你可以改变你在服务器上做事的方式(async-await),但你不能破坏管道。

于 2018-09-13T23:08:20.137 回答