2014-11-03 102 views
2

目前,我做以下的錯誤消息發送回客戶端:的Web API拋出自定義異常回客戶端

HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Forbidden) 
{ 
    ReasonPhrase = "No rights to access this resource", 
}; 

throw new HttpResponseException(message); 

不過,我想通過發回的自定義異常進一步提高響應。所以我可以有這樣的事情:

public class MyAppException : Exception {} 

public class NoRightsException : MyAppException {} 
public class SaveException : MyAppException {}  
//etc... 

我所有的異常將在一個單獨的程序集,將由服務器和客戶端引用。

如何最好將這些異常返回給客戶端,客戶端將如何檢查響應是否是我的自定義異常,另一個異常或簡單的文本消息?

+1

這可以幫助你讀到這裏的http: //stackoverflow.com/questions/10732644/best-practice-to-return-errors-in-asp-net-web-api特別是它解釋了使用Request.CreateResponse方法的示例 – 2014-11-03 16:52:11

回答

1

要回答你的問題的第一部分......返回異常的正確方法是使用Request.CreateErrorResponse。該方法有許多重載,其中一個將異常作爲參數。在你的情況,你可能會做......

Request.CreateErrorResponse(HttpStatusCode.BadRequest, new NoRightsException()); 

更新:

雖然你沒有說你的客戶的方法是什麼我將你正在使用的HttpClient承擔。如果這是你應該做類同此呼叫在這種情況下,你會發現在響應類文本或異常的情況下...

var client = new HttpClient(); 

var task = client.PostAsync(url) 
      .ContinueWith(response => 
      { 
       response.Result.EnsureSuccessStatusCode(); 
      }); 

task.Wait(); 

+0

我正在使用HttpClient。自定義異常根本沒有反序列化。我只能看到響應拋出BadRequest狀態碼的異常。 – 2014-11-04 08:45:48

+0

我沒有用它來傳回異常。我使用的模式是在服務器上記錄異常,如果請求沒有產生HttpResponse,客戶端將顯示一個通用的錯誤頁面.OK – 2014-11-04 10:23:31

相關問題