【问题标题】:.NET Send a HTTP 400 with response body.NET 发送带有响应正文的 HTTP 400
【发布时间】:2015-11-18 11:13:37
【问题描述】:

我正在处理基于 AJAX 的表单提交,该表单也将作为 API 提供给其他应用程序。因此,我正在验证进入 Save 例程的请求,以确保字段包含相关数据(数字字段中的数字、日期字段中的日期等)

我认为如果用户在请求中提交无意义的数据,则返回 HTTP 4xx 响应代码应该是最佳做法,但如果我将 HTTP 状态代码设置为 400,则我不会收到任何响应正文。

我继承了 HTTPException 来跟踪我想转发给客户端的错误的具体细节,API 交互将全部通过 JSON 进行。

我的代码是(大致):

try
    //my request validation code
catch e as myRequestLoadException
    response.write("{")
    response.write("""errormessage"": """ & e.message.replace("""","\""") & """")
    response.write("""errortext"": """ & e.tostring.replace("""","\""") & """")
    response.write("}")
    Response.StatusCode = e.myStatusCode
end try

我使用 Postman 或 Chrome 开发者工具得到的响应是:

错误请求

如果我删除设置响应状态代码的行并重复测试,那么我会得到我期望的响应。

那么是 IIS、.net 框架还是 Chrome 都没有响应正文?

【问题讨论】:

    标签: asp.net .net vb.net web-services


    【解决方案1】:

    它是 IIS,默认情况下不允许自定义内容用于响应报告错误。为此,请在您的 web.config 中进行更改:

    <system.webServer>
      <httpErrors existingResponse="PassThrough" />
    </system.webServer>
    

    取自this article

    【讨论】:

    • 感谢您这么快的回复!完美......谷歌一直给我等式“另一边”的结果,人们试图处理收到 400。
    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多