【发布时间】: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