2012-04-27 18 views
8

Próbuję zwrócić kod stanu HTTP o numerze 201 Created dla operacji RESTful POST przy użyciu interfejsu API ASP.NET 4, ale Zawsze otrzymuję numer 200 OK.Nie można pobrać interfejsu API ASP.NET 4 w celu zwrócenia kodu stanu "201 - Utworzono" dla pomyślnego wykonania testu POST

Aktualnie debuguję IIS 7.5.7600.16385, VS 2010 Professional, Windows 7 64-bit Professional.

public MyResource Post(MyResource myResource) 
{ 
    MyResource createdResource; 
    ... 
    HttpResponse response = HttpContext.Current.Response; 
    response.ClearHeaders(); // added this later, no luck 
    response.ClearContent(); // added this later, no luck 
    response.StatusCode = (int)HttpStatusCode.Created; 
    SetCrossOriginHeaders(response); 
    return createdResource; 
} 

Widziałem inne przykłady gdzie HttpContext.Current.Response.StatusCode jest ustawiona przed powrotem dane, więc nie sądzę, że będzie to problem. Nie znalazłem go jeszcze w źródle MVC 4.

(Wiąże się to z moich badań z this question ale wystarczająco innym temacie, aby uzasadnić swoje własne pytanie)

Nie jestem pewien, czy problem jest IIS lub Web API. Zrobię dalsze testy, aby je zawęzić.

Odpowiedz

9

HttpContext.Current to kac z przeszłości.

Trzeba zdefiniować jako odpowiedź HttpResponseMessage<T>:

public HttpResponseMessage<MyResource> Post(MyResource myResource) 
{ 
    .... // set the myResource 
    return new HttpResponseMessage<MyResource>(myResource) 
      { 
       StatusCode = HttpStatusCode.Created 
      }; 
} 

UPDATE

Jak można zauważyć z komentarzy, to podejście działa z beta uwalnianiu. Nie RC.

+1

Dzięki! Tak było. Właśnie zwracam komunikat HttpResponseMessage, aby w razie potrzeby móc zwrócić inny typ zawartości, ale w razie potrzeby utworzyć instancję HttpResponseMessage , która również zajmuje się moim pokrewnym pytaniem http://stackoverflow.com/questions/10336733/different-return-types -for-asp-net-mvc-4-web-api. – MikeJansen

+2

@MikeJansen Nie przyzwyczajaj się zbytnio do HttpResponseMessage z T, ponieważ znika w przyszłych kompilacjach. Zobacz http://aspnetwebstack.codeplex.com/discussions/350492 –

+1

@DarrelMiller - dziękuję, przekonwertowałem na HttpRequestMessage.CreateResponse ()! – MikeJansen

-1

Spróbuj tego:

return Request.CreateResponse<MyResource>(HttpStatusCode.Created, createdResource); 
Powiązane problemy