【问题标题】:ASP.NET controller action returns status code 200 but EndRequest has it as 204 (NoContent)ASP.NET 控制器操作返回状态代码 200 但 EndRequest 将其作为 204 (NoContent)
【发布时间】:2017-11-17 01:25:23
【问题描述】:

在我的 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 修改了响应代码,但我找不到执行此操作的特定过滤器。

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

【问题讨论】:

  • 一些操作/结果过滤器?
  • 有一堆动作过滤器,我已经禁用了所有这些在全局和控制器/动作级别应用的过滤器 - 结果相同,可能一些过滤器被隐式应用,因此我需要一种方法来知道参与请求处理的所有过滤器。
  • 可以在您之间使用代理并修改状态码吗?在我的工作中,他必须添加到我们的 apache 代理而不是修改标题。
  • 在响应命中代理(或任何其他中间体,如提琴手)之前,状态已经更改为 204。我可以在 Application_EndRequest 读取损坏的状态,而我的控制器/操作返回状态 200 和所需的视图/模型。
  • @AlexeyStrakh 您在 IIS 中使用集成管道还是旧管道?

标签: c# asp.net asp.net-mvc action-filter http-status-code-204


【解决方案1】:

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

例如,Employee 表有两条记录,id 为 1 和 2。如果使用 ef 更新 id = 3 的记录,则会出现此错误。

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

【讨论】:

  • 数据正确,数据存在,控制器返回的状态正确(200),asp.net应用在管道执行后返回的状态不正确(204)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2011-07-01
    • 2017-10-31
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多