【问题标题】:How do I return a statusCode to the client from a web service?如何从 Web 服务向客户端返回 statusCode?
【发布时间】:2016-05-19 02:01:44
【问题描述】:

我正在使用Web API 2 编写C# 网络服务,如果客户端未获得正确凭据的授权,我希望能够向客户端发送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 吗?

【问题讨论】:

  • 顺便说一句,客户端代码中的 if/else 可以更改为 return response.StatusCode == HttpStatusCode.OK;。

标签: c# asp.net-web-api2 http-response-codes


【解决方案1】:

查看 .Net 的 JsonResult

那么你可以像这样返回Task&lt;IHttpActionResult&gt;...

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

【讨论】:

    【解决方案2】:
    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        response.StatusCode == HttpStatusCode.OK;
                        return response;
                    }
                    else
                    {
                        throw new HttpResponseException(
         Request.CreateErrorResponse(HttpStatusCode.Unauthorized, myCustomMessage));
                    }
    

    可能重复: How do you return status 401 from WebAPI to AngularJS and also include a custom message?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2017-01-04
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2021-07-19
      相关资源
      最近更新 更多