Kilka miesięcy temu Microsoft zdecydował się zmienić klasę HttpResponseMessage. Wcześniej można było po prostu przekazać typ danych do konstruktora, a następnie zwrócić komunikat z tymi danymi, ale już nie.
Teraz musisz użyć właściwości Content, aby ustawić treść wiadomości. Problem polega na tym, że jest to typ HttpContent i nie mogę znaleźć sposobu na przekonwertowanie ciągu, na przykład, na HttpContent.
Czy ktoś wie, jak sobie z tym poradzić? Wielkie dzięki.
c#
asp.net-mvc
asp.net-web-api
pretor
źródło
źródło
Powinieneś utworzyć odpowiedź za pomocą Request.CreateResponse :
Możesz przekazywać obiekty, a nie tylko ciągi znaków, do CreateResponse i serializuje je na podstawie nagłówka Accept żądania. Dzięki temu nie musisz ręcznie wybierać programu formatującego.
źródło
CreateErrorResponse()
jeśli odpowiedź jest błędem, tak jak w przykładzie tej odpowiedzi. Wewnątrz mojego haczyka, którego używam:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
I to jest poprawna odpowiedź, jeśli w ogóle martwisz się o uszanowanie nagłówka Accept dzwoniącego, bez dodatkowych szyderstw. (I używasz WebAPI)ApiController
. JeśliController
zamiast tego dziedziczysz tylko dziedziczenie , to nie działa i musisz to stworzyć samodzielnie:HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
Najwyraźniej nowy sposób, aby to zrobić, jest szczegółowo opisany tutaj:
http://aspnetwebstack.codeplex.com/discussions/350492
Cytując Henrika,
Zasadniczo należy więc utworzyć typ ObjectContent, który najwyraźniej może zostać zwrócony jako obiekt HttpContent.
źródło
new JsonMediaTypeFormatter();
lub podobne, w zależności od formatuObjectContent
nie został znaleziony, używając WCFNajłatwiejszym w użyciu rozwiązaniem jednokreskowym
W przypadku serializowanej zawartości JSON:
źródło
Dla dowolnego obiektu T możesz:
źródło
Request
jest dostępna tylko w przypadkuCreateResponse
metody, jeśli dziedziczenieApiController
. Nie będzie działać, jeśli używaszController
.Możesz tworzyć własne wyspecjalizowane typy treści. Na przykład jeden dla zawartości Json i jeden dla zawartości XML (a następnie przypisz je do HttpResponseMessage.Content):
źródło
Zainspirowany odpowiedzią Simona Mattesa, musiałem spełnić wymagany przez IHttpActionResult typ zwrotu ResponseMessageResult. Używając również JsonContent nashawn, skończyło się na ...
Zobacz odpowiedź nashawn na JsonContent.
źródło
Nie ma wątpliwości, że masz rację Florin. Pracowałem nad tym projektem i stwierdziłem, że ten fragment kodu:
Można zastąpić:
źródło