मुझे विश्वास है कि सभी http त्रुटियों को अपवादों के रूप में संभालने में दिलचस्प है। सुनिश्चित नहीं है कि सबसे अच्छा अभ्यास है, लेकिन मैंने इसे आज़माया।
async void FakeLogin()
{
try{
User user = await LoginWithEmail ("[email protected]", "fakePassword");
}
catch(MyApiException e) {
MyApiError = e.Error;
}
}
मूल रूप से
FlurlHttpException मामले के लिए:
public static async Task<User> LoginWithEmail (string email, string password){
try{
return await "http://myapi.com/login"
.AppendPathSegment ("login")
.SetQueryParams (new {email = email, password = password})
.WithHeader ("Accept", "application/json")
.GetJsonAsync<User>();
}catch (FlurlHttpException e) {
return await e.Call.Response.Content.ReadAsStringAsync()
.ContinueWith<User> ((contentAsync) => {
throw new MyApiException(JsonConvert.DeserializeObject<MyApiError> (contentAsync.Result)); });
}
}
यह आप इस तरह सफलता और त्रुटि मामलों को संभालने के लिए अनुमति देता है:
मैं क्या कुछ इस तरह है , मैं ReadAsStringAsync के लिए एक निरंतरता करता हूं जहां मैं एक उपयोगकर्ता को वापस करने की निरंतरता की घोषणा करता हूं, लेकिन निरंतरता के अंदर मैं हमेशा एक अपवाद फेंक दो।
इसके अतिरिक्त
आप अपवाद के रूप में कम होने के लिए से निपटने refactor सकता है:
catch (FlurlHttpException e) {
return await MyApiException.FromFlurlException<User>(e);
}
स्रोत
2015-01-21 18:16:57
मुझे लगता है कि मेरा [नया उत्तर] (http://stackoverflow.com/a/28332184/62600) जो आप खोज रहे हैं वह होना चाहिए। –