C# 如何从web服务向客户端返回状态码?
我正在使用C# 如何从web服务向客户端返回状态码?,c#,asp.net-web-api2,http-response-codes,C#,Asp.net Web Api2,Http Response Codes,我正在使用webapi 2对C#webservice进行编码,如果客户端未获得正确凭据的授权,我希望能够向客户端发送StatusCode的Unauthorized 以下是ApiController过滤器代码: public class ApiAuthorizeAttribute : AuthorizeAttribute { protected override bool IsAuthorized(HttpActionContext actionContext) {
webapi 2
对C#
webservice进行编码,如果客户端未获得正确凭据的授权,我希望能够向客户端发送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;
}
}
}
}
}
专用异步任务请求授权异步(字符串服务器地址)
{
使用(HttpClient=new HttpClient())
{
使用(HttpRequestMessage请求=新HttpRequestMessage(HttpMethod.Get,serverAddress))
{
request.Headers.Authorization=null;
使用(HttpResponseMessage response=wait client.SendAsync(请求))
{
if(response.StatusCode==HttpStatusCode.OK)
{
返回true;
}
其他的
{
返回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));
}
可能重复:
查看.Net的
然后你可以返回一个任务
,就像这样
if (response.StatusCode == HttpStatusCode.OK)
{
return Ok();
}
else
{
return Unauthorized();
}
另外,客户机代码中的if/else可以更改为return response.StatusCode==HttpStatusCode.OK代码>。