.NET 发送带有响应正文的 HTTP 400

JLo*_*JLo 2 .net vb.net asp.net web-services

我正在处理基于 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
Run Code Online (Sandbox Code Playgroud)

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

错误的请求

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

那么是 IIS、.net 框架还是 Chrome 不提供响应主体?

And*_*rei 6

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

<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

取自这篇文章