2013-09-27 234 views
5

Có cách nào để chỉ định mã trả về thành công cho một phương thức trong bộ điều khiển API Web không?ASP.NET Web API kiểm soát mã thành công (200 so với 201)

điều khiển ban đầu của tôi đã được cấu trúc như dưới đây

public HttpResponseMessage PostProduct(string id, Product product) 
{ 
var product= service.CreateProduct(product); 
return Request.CreateResponse(HttpStatusCode.Created, product); 
} 

Tuy nhiên, có nhược điểm với phương pháp trên khi bạn tạo Web API trang trợ giúp. API trang Trợ giúp API Web không thể tự động giải mã rằng Sản phẩm được nhập mạnh mẽ là phản hồi và do đó tạo ra một đối tượng phản hồi mẫu trong tài liệu của nó.

Vì vậy, tôi đi với cách tiếp cận dưới đây, nhưng ở đây mã thành công là OK (200) chứ không phải Created (201). Dù sao tôi có thể kiểm soát mã thành công của phương pháp bằng cách sử dụng một số cú pháp kiểu thuộc tính? Ngoài ra, tôi cũng muốn đặt tiêu đề Vị trí thành URL nơi tài nguyên được tạo sẵn có - một lần nữa, điều này rất dễ thực hiện khi tôi xử lý HttpResponseMesage.

public Product PostProduct(string id, Product product) 
{ 
var product= service.CreateProduct(product); 
return product; 
} 

Trả lời

3

Về quan sát của bạn dưới đây:

However, there is drawback to the above approach when you generate Web API help pages. The Web API Help page API cannot automatically decode that the strongly typed Product is the response and hence generate a sample response object in its documentation.

Bạn có thể có một cái nhìn tại HelpPageConfig.cs tập tin đó được cài đặt với gói helppage. Nó có một ví dụ chính xác cho một kịch bản giống như kịch bản của bạn, nơi bạn có thể đặt loại phản hồi thực tế.

Trong phiên bản mới nhất (5.0 - hiện tại RC) của API Web, chúng tôi đã giới thiệu một thuộc tính được gọi là ResponseType mà bạn có thể sử dụng để trang trí hành động với loại thực tế. Bạn sẽ có thể sử dụng thuộc tính này cho kịch bản của bạn.

+0

Cảm ơn, điều đó đã hiệu quả. Vâng, sẽ được tốt đẹp để trang trí nó cùng với định tuyến thuộc tính mà không cần phải viết cùng một bản đồ ở một nơi khác. Vui mừng khi biết nó sắp ra mắt trong bản phát hành tiếp theo. – govin

+0

Xin chào, trong bản phát hành sắp tới của API Web, cũng sẽ có một điều khoản để chỉ định SuccessResponseType và ErrorResponseType cùng với danh sách các mã trạng thái có thể cho chúng - để tôi có thể nắm bắt chúng cũng như trong tài liệu API? – govin

1

Tôi làm điều này:

[HttpGet] 
public MyObject MyMethod() 
{ 
    try 
    { 
     return mysService.GetMyObject() 
    } 
    catch (SomeException) 
    { 
     throw new HttpResponseException(
      new HttpResponseMessage(HttpStatusCode.BadRequest) 
       { 
        Content = 
         new StringContent("Something went wrong.") 
       }); 
    } 
} 

Nếu bạn không có được những gì bạn mong đợi, ném một HttpResponseException.