【发布时间】:2012-01-16 01:19:07
【问题描述】:
我们有一个 C# AJAX 服务器来处理数据库请求,我们希望在异常时返回 400/403/500 状态代码,以便我们了解客户端发生的情况。但是,我们得到的只是响应正文中的“Bad Request”。
例如,如果 ADO.Net 驱动程序返回此消息:
传递给 LEFT 或 SUBSTRING 函数的长度参数无效。 无法将值 NULL 插入列“--COLUMN--”,表 '--DATABASE.SCHEMA.TABLE--';列不允许空值。插入 失败。声明已终止。
然后我们的 AJAX 服务器简单地返回这个文本:
错误请求
我查看了 Chrome 中的完整响应标头,其中甚至没有任何类似此错误消息的内容。这是我们用来发回错误的代码:
catch (Exception ex)
{
//Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.SC_BAD_REQUEST;
Response.Write(ex.Message);
Response.Flush();
}
在与此服务器等效的 Java/JSP 中,我们使用以下代码获得了正确的行为:
} catch (Exception e) {
response.sendError(response.SC_BAD_REQUEST, e.getClass() + " : " + e.getMessage());
}
【问题讨论】: