W przypadku zwrotu z kontrolera Web API 2 mogę zwrócić treść z odpowiedzią, jeśli odpowiedź jest OK (status 200) w następujący sposób:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Jeśli to możliwe, chcę tutaj użyć wbudowanych typów wyników: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Moje pytanie brzmi: w przypadku innego rodzaju odpowiedzi (nie 200), jak mogę zwrócić z nią wiadomość (ciąg znaków)? Na przykład mogę to zrobić:
public IHttpActionResult Get()
{
return InternalServerError();
}
ale nie to:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Idealnie byłoby, gdyby uogólniono to, aby móc odesłać wiadomość z dowolną implementacją IHttpActionResult.
Czy muszę to zrobić (i zbudować własny komunikat odpowiedzi):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
Czy jest jakiś lepszy sposób?
c#
asp.net-web-api
httpresponse
mayabelle
źródło
źródło
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxOdpowiedzi:
Możesz użyć tego:
źródło
code
(gdzie kod jest łańcuchem)return Content(HttpStatusCode.OK, code)
jest zawarta w „co jest nieoczekiwane, czy jest jakiś powód tego? Np."\"value\""
Zwracana wartość to : używam mvc5Możesz użyć HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
przestrzeń nazw) w następujący sposób:Preferowane jest tworzenie odpowiedzi na podstawie żądania, aby skorzystać z negocjacji treści interfejsu API sieci Web.
źródło
ApiController.Request
jest pusty, oznacza to, że nie masz odpowiedniego kontekstu lub coś jest nie tak z architekturą WebAPI.Skończyło się na następującym rozwiązaniu:
... które można wykorzystać w następujący sposób:
Jestem otwarty na propozycje ulepszeń. :)
źródło
Możesz także:
źródło
Każdy, kto jest zainteresowany zwrotem czegokolwiek z dowolnym kodem statusu ze zwrotem ResponseMessage:
źródło
W ASP.NET Web API 2 możesz zawinąć dowolne
ResponseMessage
w ResponseMessageResult :W niektórych przypadkach może to być najprostszy sposób na uzyskanie pożądanego rezultatu, chociaż generalnie może być preferowane użycie różnych wyników w System.Web.Http.Results .
źródło
Prosty:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
Pamiętaj, aby odwoływać się do System.Net.Http i System.Net .
źródło
Polecam przeczytać ten post. Istnieje wiele sposobów korzystania z istniejącego HttpResponse zgodnie z sugestią, ale jeśli chcesz skorzystać z Web Api 2, spójrz na użycie niektórych z wbudowanych opcji IHttpActionResult, takich jak
lub
Wybierz odpowiedni typ zwrotu dla kontrolerów interfejsu API sieci Web
źródło
Bardziej szczegółowy przykład z obsługą kodu HTTP nie zdefiniowanego w języku C #
HttpStatusCode
.Content
jest wirtualną metodą zdefiniowaną w klasie abstrakcyjnejApiController
, stanowiącej podstawę kontrolera. Zobacz deklarację jak poniżej:źródło
@mayabelle możesz stworzyć beton IHttpActionResult i zawinąć kod w następujący sposób:
źródło
Miałem ten sam problem. Chcę utworzyć niestandardowy wynik dla moich kontrolerów interfejsu API, aby wywoływać je w podobny sposób
return Ok("some text");
Następnie zrobiłem to: 1) Utwórz niestandardowy typ wyniku za pomocą singletone
2) Utwórz niestandardowy kontroler za pomocą nowej metody:
A potem mogę wywoływać je w moich kontrolerach w następujący sposób:
źródło
ta odpowiedź oparta jest na odpowiedzi Shamila Jakupowa, z prawdziwym przedmiotem zamiast łańcucha.
źródło
Z wyjątkami zwykle tak robię
źródło
Powyższe rzeczy są naprawdę pomocne.
Podczas tworzenia usług internetowych, jeśli weźmiesz pod uwagę usługi, konsument będzie bardzo wdzięczny. Starałem się zachować jednolitość wyjścia. Możesz także podać uwagę lub komunikat o błędzie. Konsument usługi internetowej może tylko sprawdzić, czy IsSuccess ma wartość true, czy nie, aby upewnić się, że wystąpił problem i postępować zgodnie z sytuacją.
Jeśli masz jakieś sugestie, możesz podać sugestie :)
źródło
Przepraszam za późną odpowiedź, dlaczego nie skorzystasz z niej w prosty sposób
return BadRequest("your message");
Używam tego do wszystkiego
IHttpActionResult
błędów, działa dobrzetutaj jest dokumentacja: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
źródło
400
odpowiedź byłaby niewłaściwa. OP konkretnie podał500
odpowiedź jako przykład.