C# Api令牌验证错误
如果JSON API上的令牌无效,我应该返回什么类型或错误C# Api令牌验证错误,c#,asp.net-web-api2,C#,Asp.net Web Api2,如果JSON API上的令牌无效,我应该返回什么类型或错误 // GET api/Job public IEnumerable<Job_Hdr> GetJob_Hdr() { if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true) throw new Exception("Invalid token"); .
// GET api/Job
public IEnumerable<Job_Hdr> GetJob_Hdr()
{
if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true)
throw new Exception("Invalid token");
...
}
//获取api/Job
公共IEnumerable GetJob_Hdr()
{
if(Validation.isValid(Request.Headers.GetValues(“Token”).Single())==true)
抛出新异常(“无效令牌”);
...
}
我同意评论中建议的@Evk,返回的错误应该是HTTP 401
未经授权的
在WebAPI中,我建议将函数的返回类型设置为HttpResponseMessage
,您可以抛出如下错误:
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "String error Message");
所以最终的代码可以是:
// GET api/Job
public HttpResponseMessage GetJob_Hdr()
{
if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true)
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "String Message");
...
IEnumerable<Job_Hdr> JobModelCollection=GetYourData();
return Request.CreateResponse(HttpStatusCode.OK, JobModelCollection);
}
//获取api/Job
公共httpresponsemessagegetjob_Hdr()
{
if(Validation.isValid(Request.Headers.GetValues(“Token”).Single())==true)
返回请求.CreateErrorResponse(HttpStatusCode.Unauthorized,“字符串消息”);
...
IEnumerable JobModelCollection=GetYourData();
return Request.CreateResponse(HttpStatusCode.OK,JobModelCollection);
}
如果您想更改API路由,还可以通过使用属性[route(“API/Job/GetJob\u Hdr”)]
来修饰API方法。通过这种方式,您可以将方法调用为api/Job/GetJob\u Hdr
&也可以使用路由在同一个api中定义多个get方法。我同意@Evk在评论中的建议,返回的错误应该是http401
未经授权的
在WebAPI中,我建议将函数的返回类型设置为HttpResponseMessage
,您可以抛出如下错误:
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "String error Message");
所以最终的代码可以是:
// GET api/Job
public HttpResponseMessage GetJob_Hdr()
{
if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true)
return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "String Message");
...
IEnumerable<Job_Hdr> JobModelCollection=GetYourData();
return Request.CreateResponse(HttpStatusCode.OK, JobModelCollection);
}
//获取api/Job
公共httpresponsemessagegetjob_Hdr()
{
if(Validation.isValid(Request.Headers.GetValues(“Token”).Single())==true)
返回请求.CreateErrorResponse(HttpStatusCode.Unauthorized,“字符串消息”);
...
IEnumerable JobModelCollection=GetYourData();
return Request.CreateResponse(HttpStatusCode.OK,JobModelCollection);
}
如果您想更改API路由,还可以通过使用属性[route(“API/Job/GetJob\u Hdr”)]
来修饰API方法。通过此方法,您可以将方法调用为api/Job/GetJob\u Hdr
&还可以使用路由在同一个api中定义多个get方法。
您应该从API方法中抛出一个HttpResponseException
,而不是HttpException
:
throw new HttpResponseException(HttpStatusCode.Unauthorized);
或者,如果要提供自定义消息:
var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" };
throw new HttpResponseException(msg);
您应该从API方法中抛出一个HttpResponseException
,而不是HttpException
:
throw new HttpResponseException(HttpStatusCode.Unauthorized);
或者,如果要提供自定义消息:
var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" };
throw new HttpResponseException(msg);
401未经授权。顺便说一下,在上面的代码中,当令牌有效时,您会抛出异常。401未经授权。顺便说一下,在上面的代码中,当令牌有效时,您会抛出异常。