【问题标题】:How do I return an HTTP 400 - Bad Request error from a web form request?如何从 Web 表单请求返回 HTTP 400 - Bad Request 错误?
【发布时间】:2011-11-02 05:51:39
【问题描述】:

这个主题几乎说明了一切。我有一个必须使用 EstateId 请求参数调用的 EstateReport Web 表单。如果我们不存在此参数,我想返回一个适当的 HTTP 错误。如何返回 HTTP 错误 400 作为响应?

切线,如果所需的参数不存在,我应该返回错误,我觉得这更正确,还是重定向到报告的搜索页面,这对用户更友好?

【问题讨论】:

    标签: asp.net webforms asp.net-4.0


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      因此,据我了解,表单需要一个参数才能以有意义的方式显示结果。 400 是一个错误请求,虽然我理解您的想法,但规范指出:

      “由于语法错误,服务器无法理解该请求。客户端不应在未修改的情况下重复该请求。”

      从最纯粹的意义上说,如果有人请求说“EstateReport.aspx”而没有参数,服务器仍然可以解释它并以适当的响应进行回复,因此它不是广义上的“错误请求”。

      我的建议是您检测到参数的缺失并呈现适当的错误消息,其中包含指向页面的链接,他们可以通过某种方式选择适当的“estateId”,因此当请求 EstateReport 时,参数存在.

      【讨论】:

      • 感谢@kd7的输入,但我也在考虑机器请求的报告URL,因此错误消息应该是机器可读的,状态码是机器可读的。
      • 啊,我明白了...我只以为人类会通过浏览器请求页面。
      • 到目前为止,这只是人类,但我经常因为想得太多而感到内疚。 :-) 很可能是服务请求报告,然后将其 PDF 版本发布给订阅者。我不希望他们都通过电子邮件收到错误消息的 PDF 版本。
      【解决方案3】:

      你可以:

      throw new HttpException(400, "Bad Request");
      

      Response.StatusCode = 400;
      Response.End();
      

      但我的想法与下面的 kd7 相同 - 为什么不向客户显示错误消息让他们知道问题所在?

      【讨论】:

      • 在编译之前我必须使用new 而不是New
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2016-06-29
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      相关资源
      最近更新 更多