c# - 服务器未返回状态代码为 400 的 JSON (.net)

标签 c# .net json asp.net-mvc

我遇到了一个奇怪的问题,即返回 400 状态代码和 json 错误。

在我的 Controller 中,我有类似的东西:

if(!ModelState.IsValid)
{
    string[] errors = ModelState.Values
                            .SelectMany(x => x.Errors)
                            .Select(x => x.ErrorMessage).ToArray<string>();

    Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
    return Json(new { success = false, errors = errors }, JsonRequestBehavior.DenyGet);
}

这在我的开发机器上运行良好。我可以在 ajax 错误方法中得到错误。但是当我部署到服务器时,服务器不再返回 JSON。我总是得到 responseText 而不是 reponseJSON。如果我删除 Response.StatusCode 它工作正常。

这让我相信当我设置 Response 对象的 StatusCode 属性时函数“返回”。这有发生在其他人身上吗?有人知道解决方案吗?

最佳答案

我终于明白问题出在哪里了。将此张贴在这里作为对其他可能对此感到不安的人的回答。

设置以下内容:

Response.TrySkipIisCustomErrors = true;

确保在设置状态代码之前设置此项。我还弄清楚了为什么它在我的本地机器上工作而不是在测试/uat 服务器上工作。在我的 web.config 中,CustomErrors 被设置为 Off 而在服务器上它被设置为 On

服务器一看到 BadRequest 状态代码被写入 Response 就“返回”。

关于c# - 服务器未返回状态代码为 400 的 JSON (.net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313441/

相关文章:

c# - 停止应用程序时停止服务的顺序是什么

c# - 创建断开连接的数据库应用程序的最佳基于 .NET3.5 的策略

.net - 使用货币字符串格式时防止四舍五入

Tomcat 中的 HTML Href

c# - Dictionary<TKey, TValue> 中的键是不可变的吗?

c# - 如何显示(或写入文件)希腊字符?

c# - 在 Windows Mobile 中如何使应用程序在设备启动时启动?

c# - 在 .NET 6 中使用 xsltc.exe 生成的程序集(XSLT 样式表)

javascript - 新 web 项目上 javascript 配置的最佳实践

java - org.json.JSONObject 类型的响应无法转换为 JSONArray