2016-06-07 87 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方法。