Für die Rückkehr von einem Web API 2-Controller kann ich Inhalt mit der Antwort zurückgeben, wenn die Antwort wie folgt in Ordnung ist (Status 200):
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
Wenn möglich, möchte ich die integrierten Ergebnistypen hier verwenden, wenn dies möglich ist: https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx
Meine Frage ist, wie kann ich für eine andere Art von Antwort (nicht 200) eine Nachricht (Zeichenfolge) damit zurückgeben? Zum Beispiel kann ich das tun:
public IHttpActionResult Get()
{
return InternalServerError();
}
aber nicht das:
public IHttpActionResult Get()
{
return InternalServerError("Message describing the error here");
}
Idealerweise möchte ich, dass dies verallgemeinert wird, damit ich eine Nachricht mit einer der Implementierungen von IHttpActionResult zurücksenden kann.
Muss ich das tun (und meine eigene Antwortnachricht erstellen):
public IHttpActionResult Get()
{
HttpResponseMessage responseMessage = ...
return ResponseMessage(responseMessage);
}
oder gibt es einen besseren weg
c#
asp.net-web-api
httpresponse
Mayabelle
quelle
quelle
ApiController.InternalServerError
msdn.microsoft.com/en-us/library/dn292630(v=vs.118).aspxAntworten:
Sie können dies verwenden:
quelle
code
(wobei Code eine Zeichenfolge ist) inreturn Content(HttpStatusCode.OK, code)
eingekapselt in "was unerwartet ist, gibt es einen Grund dafür?"\"value\""
ZB der zurückgegebene Wert ist mvc5Sie können HttpRequestMessagesExtensions.CreateErrorResponse (
System.Net.Http
Namespace) wie folgt verwenden :Es ist vorzuziehen, Antworten basierend auf der Anforderung zu erstellen, um die Inhaltsverhandlung der Web-API zu nutzen.
quelle
ApiController.Request
null ist, bedeutet dies, dass Sie sich nicht im richtigen Kontext befinden oder dass Ihre WebAPI-Architektur fehlerhaft ist.Am Ende habe ich folgende Lösung gewählt:
... was so verwendet werden kann:
Ich bin offen für Verbesserungsvorschläge. :) :)
quelle
Sie können auch tun:
quelle
Jeder, der daran interessiert ist, etwas mit einem beliebigen Statuscode mit der Rückgabe von ResponseMessage zurückzugeben:
quelle
In ASP.NET Web API 2 können Sie alle
ResponseMessage
in ein ResponseMessageResult einschließen :In einigen Fällen ist dies möglicherweise der einfachste Weg, um das gewünschte Ergebnis zu erzielen , obwohl es im Allgemeinen vorzuziehen ist, die verschiedenen Ergebnisse in System.Web.Http.Results zu verwenden .
quelle
Einfach:
return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));
Denken Sie daran, auf System.Net.Http und System.Net zu verweisen .
quelle
Ich würde empfehlen, diesen Beitrag zu lesen. Es gibt unzählige Möglichkeiten, vorhandene HttpResponse wie vorgeschlagen zu verwenden. Wenn Sie jedoch Web Api 2 nutzen möchten, sollten Sie einige der integrierten IHttpActionResult-Optionen verwenden, z
oder
Wählen Sie den richtigen Rückgabetyp für Web-API-Controller
quelle
Ein detaillierteres Beispiel mit Unterstützung von HTTP-Code, der nicht in C # definiert ist
HttpStatusCode
.Content
ist eine virtuelle Methode, die in der abstrakten KlasseApiController
, der Basis des Controllers, definiert ist. Siehe die Erklärung wie folgt:quelle
@mayabelle Sie können IHttpActionResult-Beton erstellen und diesen Code wie folgt umschließen:
quelle
Ich hatte das gleiche Problem. Ich möchte ein benutzerdefiniertes Ergebnis für meine API-Controller erstellen, um sie wie folgt aufzurufen
return Ok("some text");
Dann habe ich Folgendes getan: 1) Erstellen Sie einen benutzerdefinierten Ergebnistyp mit Singletone
2) Erstellen Sie einen benutzerdefinierten Controller mit einer neuen Methode:
Und dann kann ich sie in meinen Controllern so aufrufen:
quelle
Diese Antwort basiert auf der Antwort von Shamil Yakupov mit einem realen Objekt anstelle einer Zeichenfolge.
quelle
Für Ausnahmen mache ich normalerweise
quelle
Die oben genannten Dinge sind wirklich hilfreich.
Beim Erstellen von Webdiensten wird der Verbraucher sehr geschätzt, wenn Sie sich mit Diensten befassen. Ich habe versucht, die Einheitlichkeit der Ausgabe aufrechtzuerhalten. Sie können auch eine Bemerkung oder eine tatsächliche Fehlermeldung geben. Der Webdienst-Konsument kann nur überprüfen, ob IsSuccess wahr ist oder nicht, sonst wird er sicher sein, dass ein Problem vorliegt, und je nach Situation handeln.
Sie können gerne Vorschläge machen, falls vorhanden :)
quelle
Entschuldigen Sie die späte Antwort, warum verwenden Sie sie nicht einfach?
return BadRequest("your message");
Ich benutze es für alle meine
IHttpActionResult
Fehler, es funktioniert gutHier ist die Dokumentation: https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.badrequest(v=vs.118).aspx
quelle
400
wäre eine Antwort unangemessen. OP gab speziell eine500
Antwort als Beispiel.