ASP.NET 控制器操作 returns 状态代码 200 但 EndRequest 将其设置为 204 (NoContent)

ASP.NET controller action returns status code 200 but EndRequest has it as 204 (NoContent)

在我的 ASP.NET MVC 应用程序控制器中处理请求和 returns 具有状态代码 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 修改了响应代码,但我找不到执行此操作的特定过滤器。

什么可能会修改我的响应的状态代码以及我如何调试处理给定请求的所有过滤器?

它在某种程度上是正确的,这意味着系统一切正常,数据(内容)有些不对。

例如,员工 table 有两条 ID 为 1 和 2 的记录。如果您使用 ef 更新 ID = 3 的记录,您将收到此错误。

您需要做的是..对您的数据进行适当的验证。

问题已找到。罪魁祸首是作为父控制器动作处理的一部分执行的 Child Action。当父控制器动作以200状态加上内容执行时,Child Action作为父动作的一部分执行,returnsNoContent和状态204。它修改响应以具有 204 状态加上主要操作呈现的内容。

解决方法是确保 Child Action 仅作为子操作起作用,不会修改整个响应。