如何从 Web 服务向客户端返回状态代码

本文关键字:客户端 返回 状态 代码 服务 Web | 更新日期: 2023-09-27 18:33:59

我正在使用Web API 2编写C# Web 服务,如果客户端未获得正确凭据的授权,我希望能够向客户端发送StatusCode Unauthorized

以下是ApiController筛选器代码:

public class ApiAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {
            return true;
        }
        else
        {
            var httpResponseMessage = new HttpResponseMessage();
            httpResponseMessage.StatusCode = System.Net.HttpStatusCode.Unauthorized;
            actionContext.Response = httpResponseMessage;
            return false;
        }
    }
}

这是HttpClient代码:

private async Task<bool> RequestAuthorizeAsync(string serverAddress)
{
    using (HttpClient client = new HttpClient())
    {
        using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, serverAddress))
        {
            request.Headers.Authorization = null;
            using (HttpResponseMessage response = await client.SendAsync(request))
            {
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
    }
}

IsAuthorized 函数返回 false 时,设置了httpResponseMessage对象,HttpClient仍然返回 200 StatusCode,而不是 401 的StatusCode

我可以帮忙将 401 StatusCode退回HttpClient吗?

如何从 Web 服务向客户端返回状态代码

if (response.StatusCode == HttpStatusCode.OK)
                {
                    response.StatusCode == HttpStatusCode.OK;
                    return response;
                }
                else
                {
                    throw new HttpResponseException(
     Request.CreateErrorResponse(HttpStatusCode.Unauthorized, myCustomMessage));
                }

可能重复:如何将状态 401 从 WebAPI 返回到 AngularJS,并包含自定义消息?

退房 .Net's JsonResult

然后你可以像这样返回一个Task<IHttpActionResult>...

            if (response.StatusCode == HttpStatusCode.OK)
            {
                return Ok();
            }
            else
            {
                return Unauthorized();
            }