2017-11-17 84 views
5

W moim kontrolerze aplikacji ASP.NET MVC przetwarza żądanie i zwraca określony widok z kodem stanu 200. Kiedy dotrze do Application_EndRequest, to już jest 204. Treść odpowiedzi w moim widoku jest poprawna i znajduje się w odpowiedzi, więc modyfikowany jest tylko kod statusu. Oto przykład (status jest 204, ale treść jest tam):Działanie kontrolera ASP.NET zwraca kod stanu 200, ale EndRequest ma go jako 204 (NoContent)

HTTP/1.1 204 No Content 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: text/html; charset=utf-8 
Expires: -1 
Vary: User-Agent 
Access-Control-Allow-Origin: * 
Date: Fri, 24 Nov 2017 22:12:17 GMT 

To może być ActionFilter modyfikowania kodu odpowiedzi, ale nie był w stanie znaleźć określony filtr, który robi to.

Co może potencjalnie zmienić kod statusu mojej odpowiedzi i jak mogę debugować wszystkie filtry działające na dane żądanie?

+0

Jakiś filtr akcji/wyniku? – Shyju

+0

jest kilka filtrów akcji, wyłączyłem wszystkie, które zostały zastosowane globalnie i na poziomie kontrolera/działania - ten sam wynik, prawdopodobnie niektóre filtry są domyślnie zastosowane, więc potrzebuję sposobu na poznanie wszystkich filtrów uczestniczących w przetwarzaniu żądania . –

+0

Czy serwer proxy może znajdować się między Tobą i modyfikować kod statusu? W swojej pracy musiał dodać do naszego serwera proxy Apache, aby nie modyfikować nagłówków. –

Odpowiedz

1

Ten problem został znaleziony. Winowajcą jest Child Action, który został wykonany jako część przetwarzania działania kontrolera nadrzędnego. Kiedy akcja kontrolera nadrzędnego jest wykonywana ze statusem 200 i treścią, Child Action, który jest wykonywany jako część akcji nadrzędnej, zwraca NoContent i status 204. Modyfikuje odpowiedź, aby uzyskać status 204 oraz treść renderowaną przez działanie podstawowe.

Rozwiązaniem jest upewnienie się, że Child Action działa tylko jako akcja podrzędna i nie modyfikuje całej odpowiedzi.

1

Jest poprawny w sposób, który oznacza, że ​​wszystko jest w porządku z systemem, coś jest nie tak z danymi (treścią).

Przykład, tabela pracowników ma dwa rekordy, które mają id 1 i 2. Jeśli zaktualizujesz rekord, gdzie id = 3, użyjesz ef, otrzymasz ten błąd.

Co należy zrobić, to ... przeprowadzić poprawną weryfikację danych.

+0

dane są poprawne, dane są obecne, status zwracany przez kontroler jest poprawny (200), status zwracany przez aplikację asp.net po wykonaniu potoku jest nieprawidłowy (204) –