Действие контроллера ASP.NET возвращает код состояния 200, но EndRequest имеет значение 204 (NoContent)
В моем ASP.NET MVC контроллер приложения обрабатывает запрос и возвращает конкретное представление с кодом состояния. 200
, Когда дело доходит до Application_EndRequest
это уже 204
, Содержимое ответа, на мой взгляд, является правильным и находится в ответе, поэтому изменяется только код состояния. Вот пример (статус 204, но контент есть):
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
Это может быть ActionFilter
изменив код ответа, но я не смог найти специальный фильтр, который это делает.
Что может потенциально изменить код состояния моего ответа и как я могу отладить все фильтры, работающие над данным запросом?
2 ответа
Проблема была найдена. Виновником является Child Action
который был выполнен как часть обработки действий родительского контроллера. Когда действие родительского контроллера выполняется с 200
статус плюс контент, Child Action
, который выполняется как часть родительского действия, возвращает NoContent
и статус 204
, Это изменяет ответ, чтобы иметь 204
статус плюс контент, отображаемый с помощью основного действия.
Исправление заключается в том, чтобы убедиться, что Child Action
работает только как дочернее действие и не изменяет весь ответ.
Это правильно, что означает, что с системой все в порядке, что-то не так с данными (контентом).
Например, таблица Employee имеет две записи с идентификаторами 1 и 2. Если вы обновите запись, где id = 3, с помощью ef, вы получите эту ошибку.
Что вам нужно сделать, это... сделать правильную проверку ваших данных.