2015-03-04 13 views
7

Theo trang web sau đây, bạn có thể vượt qua một tham số ngoại lệ đối với phương pháp HttpResponseMessage.CreateErrorResponse (https://msdn.microsoft.com/en-us/library/jj127064(v=vs.118).aspx)Làm thế nào tôi có thể lấy thông qua ngoại lệ từ HttpResponseMessage (HttpStatusCode, Exception)

Câu hỏi của tôi là làm thế nào tôi có thể lấy lại ngoại lệ thông tin từ HttpResponseMessage được tạo bởi phương thức CreateErrorResponse. Nếu không có cách nào để có được thông tin ngoại lệ, điểm của việc có quá tải phương thức cho việc ngoại lệ là đầu vào là gì?

Để làm rõ về những gì câu trả lời tôi không tìm kiếm ... tôi biết rằng tôi có thể vượt qua một lý do lỗi tùy chỉnh trong nội dung của cơ thể (http://weblogs.asp.net/fredriknormen/asp-net-web-api-exception-handling) nhưng tôi thực sự chỉ tò mò về cách sử dụng HttpRequestMessageExtensions Phương thức .CreateErrorResponse (HttpRequestMessage, HttpStatusCode, Ngoại lệ) quá tải.

Ví dụ WebAPI Bộ điều khiển:

Route("location/{locationName}/Databases/{databasename}/ProcedureSession")][LocationSetUp] 
public HttpResponseMessage Post([FromBody] ProcedureSessionData procedureSession) 
    { 
     try 
     { 
      throw new Exception("test Exception"); 
     } 
     catch (Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, 
      e); 
     } 
    } 

Làm thế nào để nhặt ngoại lệ trong mã này:

using (var client = new HttpClient()) 
    { 
    client.BaseAddress = new Uri("http://localhost/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    string api = "testApi/location/here/databases/testDb/ProcedureSession"; 
    HttpResponseMessage response = client.PostAsJsonAsync(api, newSessionData).Result; 
    if (!response.IsSuccessStatusCode) 
    { 
     //how can i pick up the exception object from here? 
     //Or am I missing the point of this CreateErrorResponse overload? 
    } 
+2

bạn có thể hiển thị mã nào bạn có liên quan đến những gì bạn đã thử hoặc những gì bạn đang cố gắng làm ..? – MethodMan

Trả lời

8

Để nhận được thông báo lỗi từ HttpResponseMessage bạn có để có được những đối tượng HttpError như phía dưới. Đối tượng HttpError sau đó chứa thông tin ExceptionMessage, ExceptionType và StackTrace.

if(!response.IsSuccessStatusCode){ 
    HttpError error = response.Content.ReadAsAsync<HttpError>().Result; 
} 
3

bạn có thể thử sử dụng

response.EnsureSuccessStatusCode() 

Mà sẽ ném một ngoại lệ nếu một mã phản hồi thành công không nhận được.

Các vấn đề liên quan