Ich erstelle RESTful-Dienst mit Microsoft ASP.NET Web API.ASP.NET Web API Entfernen von HttpError aus Antworten
Mein Problem betrifft HttpErrors, die die Web-API dem Benutzer zurückgibt, wenn etwas schief geht (z. B. 400 Bad Request oder 404 Not Found).
Das Problem ist, dass ich will nicht serialisiert httperror als Antwort Inhalt erhalten, wie es manchmal zu viel Information liefert, deshalb verletzt es OWASP Sicherheitsregeln, zum Beispiel:
Anfrage:
http://localhost/Service/api/something/555555555555555555555555555555555555555555555555555555555555555555555
Als Antwort erhalte ich 400 natürlich, aber mit folgenden Inhaltsinformationen:
{
"$id": "1",
"Message": "The request is invalid.",
"MessageDetail": "The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'MyNamespaceAndMethodHere(Int32)' in 'Service.Controllers.MyController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter."
}
So etwas wie dies nur zeigt nicht, dass mein WebServic e basiert auf ASP.NET WebAPI Technologie (was nicht so schlimm ist), sondern auch gibt es einige Informationen über meine Namensräume, Methodennamen, Parameter usw.
Ich versuchte IncludeErrorDetailPolicy in Global.asax zu setzen
Ja, das hat irgendwie gut funktioniert, jetzt enthält das Ergebnis keinen MessageDetail-Abschnitt, aber ich möchte diesen HttpError überhaupt nicht bekommen.
Ich habe auch meine eigenen DelegatingHandler, aber es betrifft auch 400s und 404s, die ich selbst in den Controllern, die ich nicht passieren will.
Meine Frage ist: Gibt es einen bequemen Weg, um serialisierte HttpError von Response Content loszuwerden? Alles, was ich möchte, dass der Benutzer für seine schlechten Anfragen zurückkommt, ist der Antwortcode.
Nun, ich denke, das wäre gut, aber in meiner Anwendung gebe ich meine eigenen HttpResponseMessages, manchmal als 400 Bad Request, zum Beispiel wenn jemand neue Datensatz in meine Datenbank einfügen will, verwendet er Controller PostNewRecord-Methode. Der Datensatz, den er einfügt, wird durch die Validierung übergeben. Wenn er feststellt, dass einige Felder fehlen, gibt der Controller Bad Request mit meiner eigenen Nachricht zurück, dass einige Felder leer waren. In Ihrer Lösung würde MyApiControllerActionInvoker diese Antwort abfangen und meine Nachricht entfernen, die ich nicht passieren möchte. Ich möchte nur Web-API-generierte Nachrichten entfernen. –
+1 für den verknüpften Artikel. Tolles lesen re: Header –