【问题标题】:How to pass errors back in responseText using C# / ASP.Net如何使用 C#/ASP.Net 在 responseText 中传回错误
【发布时间】: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());

}    

【问题讨论】:

    标签: c# asp.net ajax exception


    【解决方案1】:

    有几件事情可能会出错,但我敢打赌,您是在 IIS7 上运行的,并且它的默认设置会导致它重写错误。在httpErrors 配置设置上尝试TrySkipIisCustomErrors 属性和existingResponse 属性。

    【讨论】:

    • 将其添加到 web.config 中起到了作用 - 非常感谢! <system.webServer> <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" existingResponse="PassThrough"> </httpErrors> </system.webServer>
    【解决方案2】:

    服务器正在将错误消息封装到错误请求中,以防止安全详细信息到达客户端。您可以通过将 customErrors 设置为关闭来修改此行为,例如

    <system.web>
        <customErrors mode="Off">
        </customErrors> 
    </system.web>
    

    【讨论】:

    • 如果 ASP.NET 之外的东西引发错误,而不是那些显式设置的错误,这会影响选择哪个,不是吗?
    • 我只是在 web.config 中更改了它,它没有效果。
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多