asp.net-mvc-4 - 无法从委派处理程序 Web API 返回未经授权的 HTTP

标签 asp.net-mvc-4 asp.net-web-api

我正在尝试在 DelegatingHandler 中实现身份验证。下面是一个例子。

public class AuthHandler: DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var auth = request.Headers.Authorization;
        if (!auth.Scheme.Equals("UberSecureScheme"))
        {
            return new Task<HttpResponseMessage>(() => new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {
                    Content = new StringContent("You have no token")
                });
        }

        return base.SendAsync(request, cancellationToken);
    } 
}

这永远不会执行任务,也不会返回任何响应。如果我更改代码以执行一些任务延续的事情,就像我看到的一些示例一样,那么首先执行 Controller 。
return base.SendAsync(request, cancellationToken)
           .ContinueWith(task =>
           {
               var response = task.Result;
               response.StatusCode = HttpStatusCode.Unauthorized;
               return response;
           });

这显然是一场灾难。我不能让某人进行删除,然后告诉他们他们未经授权这样做。

我也遇到过有人说只是抛出一个 HTTPResponseException。无论我在那里输入什么状态代码(404、401 等等),浏览器总是会收到 500 内部服务器错误。

最佳答案

if (!auth.Scheme.Equals("UberSecureScheme"))
{
    var response = request.CreateResponse(HttpStatusCode.Unauthorized);
    response.ReasonPhrase = "You have no token";
    return Task.FromResult<HttpResponseMessage>(response);
}

关于asp.net-mvc-4 - 无法从委派处理程序 Web API 返回未经授权的 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20116176/

相关文章:

asp.net-mvc - SignalR 客户端在每次刷新页面时断开/连接。 ASP.NET MVC

c# - ElasticSearch 索引映射和通配符

c# - 启用迁移时出错

c# - Identity Server 4 无法验证我的访问 token

c# - 使用 HttpResponseMessage 进行长时间操作的异步

c# - 如何使用具有复杂对象参数的 ASP.NET Web API 属性路由?

file-upload - 使用 MVC4 Web-API 的文件上传表单:获取错误 101 (net::ERR_CONNECTION_RESET):连接已重置。错误

c# - IOAuthCredentials 哪个命名空间包含这个

asp.net-mvc-4 - Web API HTTP 请求命名约定

c# - 如何使用 asp.net mvc webapi 发送电子邮件附件