2013-09-27 8 views
5

Czy istnieje sposób określenia kodu powrotu powodzenia dla metody w kontrolerze Web API?ASP.NET Web API kontrolujący kod sukcesu (200 w porównaniu z 201)

Moja początkowa kontroler został skonstruowany jak poniżej

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

Jednak nie jest wadą powyższego podejścia podczas generowania Web API strony pomocy. Interfejs API strony interfejsu API WWW nie może automatycznie zdekodować, że silnie typowany produkt jest odpowiedzią, a zatem generuje przykładowy obiekt odpowiedzi w swojej dokumentacji.

Wychodzę z poniższym podejściem, ale tutaj kod sukcesu to OK (200), a nie Created (201). W każdym razie mogę kontrolować kod sukcesu metody, używając jakiejś składni stylu atrybutu? Dodatkowo, chciałbym ustawić nagłówek Location na adres URL, w którym jest dostępny stworzony zasób - ponownie, było to łatwe do zrobienia, gdy miałem do czynienia z HttpResponseMesage.

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

Odpowiedz

3

Odnośnie twojej obserwacji poniżej:

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.

Można spojrzeć na HelpPageConfig.cs pliku, który zostanie zainstalowany z pakietem Helppage. Ma przykład dokładnie dla takiego scenariusza, jak twój, w którym możesz ustawić rzeczywisty typ odpowiedzi.

W najnowszej wersji (5.0 - obecnie RC) interfejsu Web API wprowadziliśmy atrybut o nazwie ResponseType, za pomocą którego można udekorować akcję rzeczywistym typem. Możesz użyć tego atrybutu do swojego scenariusza.

+0

Dzięki, to zadziałało. Tak, będzie miło udekorować go wraz z routingiem atrybutów bez konieczności pisania tego samego mapowania w innym miejscu. Cieszę się, że dowiedziałem się o tym w następnym wydaniu. – govin

+0

Witam, w nadchodzącym wydaniu Web API pojawi się również przepis określający, co SuccessResponseType i ErrorResponseType wraz z listą możliwych kodów statusu dla nich - tak, że mogę je również przechwycić w dokumentacji API? – govin

1

zrobić to:

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

Jeśli nie dostać to, czego oczekiwano, rzucać HttpResponseException.