我創建了一個可以正常工作的MVC(4)Web API。它有一個簡單的登錄方法,當用戶找不到時拋出異常。從MVC API到MVC站點的異常給出了錯誤
除了API我創建了一個簡單的網站,通過HttpClient的調用API:
public T ExecutePost<T>(string apiUrl, IEnumerable<KeyValuePair<string, string>> postData) {
HttpContent content = null;
if (postData != null)
content = new FormUrlEncodedContent(postData);
var a = _client.PostAsync(apiUrl, content).ContinueWith(httpResponseMessage =>
JsonConvert.DeserializeObject<T>(httpResponseMessage.Result.Content.ReadAsStringAsync().Result)
);
return a.Result;
}
您可以調用該方法,
ExecutePost<User>("url_to_controller_action_api", list_with_keys_and_values_to_post)
當這個方法調用與POSTDATA-fiels的API用戶名和密碼(兩者都是正確的並且由系統知道),稱爲用戶的對象將被返回...像魅力一樣工作。 當我用錯誤的用戶名和/或密碼調用這個方法時,API會拋出一個異常(用戶找不到),但ExecutePost方法也會拋出一個異常,並且網頁顯示一個很好的,黃色的,紅色的字母頁面有一些普通用戶不理解的錯誤。原因很簡單:從API返回的數據與可放入對象User中的數據不同。
所以,我想要做的是從API中反序列化一個名爲Error的對象,並將其返回給MVC網站的控制器,這樣我就可以將錯誤「User not found」放在網頁的正確設計。
這樣做的最好方法是什麼?嘗試在所有行動中抓住?對我來說感覺不舒服......所以建議比歡迎。
我發現的大部分東西都是API端的東西,但我想在網站端獲取並處理異常。
在此先感謝
我不是沿着邊界拋出異常,而是遵循寧靜的方法,讓web-api返回一個符合你的異常要求的狀態碼。所以對於沒有找到的用戶來說,404有你的httpclient讀取狀態碼,然後做出相應的反應,或者對json進行反序列化或者顯示錯誤。 – Slicksim