it-swarm.com.de

Web API Bester Ansatz für die Rückgabe von HttpResponseMessage

Ich habe ein Web-API-Projekt und meine Methoden geben immer HttpResponseMessage zurück.

Also, wenn es funktioniert oder fehlschlägt, gebe ich zurück:

Keine Fehler:

return Request.CreateResponse(HttpStatusCode.OK,"File was processed.");

Irgendein Fehler oder Misserfolg

return Request.CreateResponse(HttpStatusCode.NoContent, "The file has no content or rows to process.");

Wenn ich ein Objekt zurückgebe, verwende ich:

return Request.CreateResponse(HttpStatusCode.OK, user);

Ich möchte wissen, wie ich eine besser gekapselte Antwort an meinen HTML5-Client zurückgeben kann, damit ich mehr Informationen über die Transaktion usw. zurückgeben kann.

Ich habe darüber nachgedacht, eine benutzerdefinierte Klasse zu erstellen, die HttpResponseMessage einkapseln kann, aber auch mehr Daten enthält.

Hat jemand etwas ähnliches implementiert?

29
VAAA

Obwohl dies nicht direkt die Frage beantwortet, wollte ich einige Informationen bereitstellen, die ich als nützlich empfand. http://weblogs.asp.net/dwahlin/archive/2013/11/11/new-features-in-asp-net-web-api-2-part-i.aspx

Die HttpResponseMessage wurde mehr oder weniger durch IHttpActionResult ersetzt. Es ist viel sauberer und einfacher zu bedienen.

public IHttpActionResult Get()
{
     Object obj = new Object();
     if (obj == null)
         return NotFound();
     return Ok(obj);
 }

Dann können Sie kapseln, um benutzerdefinierte zu erstellen. Festlegen benutzerdefinierter Header bei Verwendung von IHttpActionResult?

Ich habe noch keine Notwendigkeit gefunden, ein benutzerdefiniertes Ergebnis zu implementieren, aber wenn ich dies tue, werde ich diesen Weg gehen.

Es ist wahrscheinlich sehr ähnlich, auch das alte zu verwenden.

Um dies weiter auszubauen und ein bisschen mehr Infos zu geben. Sie können auch Nachrichten zu einigen Anforderungen hinzufügen. Zum Beispiel.

return BadRequest("Custom Message Here");

Dies ist bei vielen anderen nicht möglich, hilft jedoch bei allgemeinen Nachrichten, die Sie zurücksenden möchten.

36
Kalel Wade

Sie können eine Fehlerantwort zurückgeben, um weitere Details bereitzustellen.

public HttpResponseMessage Get()
{
    HttpError myCustomError = new HttpError("The file has no content or rows to process.") { { "CustomErrorCode", 42 } };
     return Request.CreateErrorResponse(HttpStatusCode.BadRequest, myCustomError);
 }

Würden zurückkehren:

{ 
  "Message": "The file has no content or rows to process.", 
  "CustomErrorCode": 42 
}

Weitere Informationen finden Sie hier: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx

Ich benutze auch http://en.wikipedia.org/wiki/List_of_HTTP_status_codes , um herauszufinden, welcher http-Statuscode zurückgegeben werden soll.

5
Trisk

Ein wichtiger Hinweis: Geben Sie in 204 Antworten keinen Inhalt an! Dies widerspricht nicht nur der HTTP-Spezifikation, sondern .NET kann sich auch auf unerwartete Weise verhalten, wenn Sie dies tun.

Ich habe fälschlicherweise return Request.CreateResponse(HttpStatusCode.NoContent, null); verwendet und es kam zu echten Kopfschmerzen. Zukünftige Anfragen aus derselben Sitzung würden aufgrund eines "null" Zeichenfolgewert, der der Antwort vorangestellt wird. Ich vermute, .NET löscht das Antwortobjekt nicht immer vollständig für API-Aufrufe aus derselben Sitzung.

2
BigTone