Действие контроллера 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, вы получите эту ошибку.

Что вам нужно сделать, это... сделать правильную проверку ваших данных.

Другие вопросы по тегам