2011-12-08 65 views
2

我们有一个处理数据库请求的C#AJAX服务器,我们希望在异常时返回一个400/403/500状态码,以便我们可以了解发生在客户端。但是,我们回复的内容是响应正文中的“错误请求”。如何使用C#/ ASP.Net返回responseText中的错误

例如,如果驾驶员ADO.Net返回该消息:传递给LEFT或SUBSTRING函数

无效长度参数。 无法将值NULL插入'--COLUMN--'列中,表 '--DATABASE.SCHEMA.TABLE--';列不允许有空值。 INSERT 失败。该语句已终止。

然后我们的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()); 

}  

回答

1

那里有几个可能会出错的事情,但我会准备好打赌你在IIS7上运行,并且它的默认值导致它重写错误。尝试使用httpErrors配置设置中的TrySkipIisCustomErrors属性和existingResponse属性。

+1

将此添加到web.config中有诀窍 - 非常感谢! ' ' – Graham

0

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

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

这影响如果ASP.NET以外的东西提出了一个其中被选择错误,而不是那些明确设定的,不是吗? –

+0

我刚刚在web.config中更改了它,并没有任何效果。 – Graham