Buduję usługę RESTful przy użyciu interfejsu API sieci Web Microsoft ASP.NET.ASP.NET Web API usuwające HttpError z odpowiedzi
Mój problem dotyczy HttpErrors, które Web API wyrzuca użytkownikowi, gdy coś pójdzie nie tak (np. 400 Bad Request lub 404 Not Found).
Problemem jest to, że nie chcę, aby uzyskać zserializowaną httpError w treści odpowiedzi, gdyż czasami dostarcza zbyt dużo informacji, dlatego narusza ona OWASP zasady bezpieczeństwa, na przykład:
Zapytanie:
http://localhost/Service/api/something/555555555555555555555555555555555555555555555555555555555555555555555
w odpowiedzi dostaję 400 oczywiście, ale z następującymi informacjami Treść:
{
"$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."
}
Coś jak to wskazuje, że nie tylko moim WebServic e jest oparty na technologii ASP.NET WebAPI (co nie jest tak źle), ale także daje pewne informacje o moich nazw, nazw metod, parametrów itp
próbowałem ustawić IncludeErrorDetailPolicy w Global.asax
GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Never;
Tak, to jakoś dobrze, teraz wynik nie zawiera sekcji MessageDetail, ale nadal nie chcę w ogóle uzyskać tego HttpError.
Zbudowałem również mój własny DelegatingHandler, ale ma on również wpływ na 400 i 404, które sam generuję w kontrolerach, czego nie chcę.
Moje pytanie brzmi: Czy istnieje jakiś dogodny sposób na pozbycie się serializowanego HttpError z treści odpowiedzi? Wszystko, co chcę, aby użytkownik wrócił po złe żądania, to kod odpowiedzi.
Cóż, myślę, że to byłoby dobre, ale w mojej aplikacji zwracam własne HttpResponseMessages, czasami jako 400 Bad Request, na przykład, jeśli ktoś chce wstawić nowy rekord do mojej bazy danych, używa on metody kontrolera PostNewRecord. Rekord, który wstawia, przechodzi przez walidację, która jeśli wykryje, że brakuje niektórych pól, kontroler zwróci Złe żądanie z moją własną wiadomością, że niektóre pola były puste. W twoim rozwiązaniu MyApiControllerActionInvoker przechwyci tę odpowiedź i usunie moją wiadomość, której nie chcę. Chcę tylko usunąć wiadomości generowane przez Web API. –
+1 dla połączonego artykułu. Świetnie czytaj ponownie: nagłówki –