2016-06-07 60 views
1

我应该在标记无效的情况下返回上一个JSON API的API令牌验证错误

// GET api/Job 
    public IEnumerable<Job_Hdr> GetJob_Hdr() 
    { 
     if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true) 
      throw new Exception("Invalid token"); 
     ... 
    } 
+4

401未授权。顺便说一下,在上面的代码中,当token是_valid_时,会引发异常。 – Evk

回答

0

https://stackoverflow.com/a/31206850/5750143

您应该从API的方法来扔HttpResponseException,不HttpException

throw new HttpResponseException(HttpStatusCode.Unauthorized); 

或者,如果你想提供一个自定义消息:

var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" }; 
throw new HttpResponseException(msg); 
0

我@Evk同意在意见提出什么样的或错误,返回的错误应该是HTTP 401Unauthorized

在的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路由,您也可以通过修改具有属性[Route("api/Job/GetJob_Hdr")]的API方法来完成此操作。通过这个,您可以调用方法为api/Job/GetJob_Hdr &也可以在使用路由的相同API中定义多个get方法。