如何从 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
吗?
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();
}