加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 无法通过委派Handler Web API返回HTTP Unautho

发布时间:2020-12-16 06:33:04 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试在DelegatingHandler中实现身份验证.以下是一个例子. public class AuthHandler: DelegatingHandler{ protected override TaskHttpResponseMessage SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) { var auth = requ
我正在尝试在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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读