【问题标题】:c# exception not captured correctly by jquery ajaxc#异常没有被jquery ajax正确捕获
【发布时间】:2012-02-22 01:49:08
【问题描述】:

好的,我对生产环境以及 jquery ajax 如何捕获错误有问题。

在我本地机器上的开发环境中,当 jquery ajax 调用 web 服务 [webmethod] 并且 webmethod 引发特定错误时,jquery ajax 会正确捕获该错误,但在生产环境中 jquery ajax 会捕获错误但消息是通用的“有一个错误处理请求。”带有“内部服务器错误”

例如

c#代码

[WebMethod]
public String dostuff(String Auth){
// some code here
// if error occurs
throw new Exception("Some specific error message");
return "ok";
}

jquery ajax 调用

    var data = JSON.stringify({ Auth: "some data here" }, null);

    $.ajax({
        type: "POST",
        url: '/Services/memberService.asmx/dostuff',
        data: data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            alert(result.d); // alert ok
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("responseText=" + XMLHttpRequest.responseText + "\n textStatus=" + textStatus + "\n errorThrown=" + errorThrown);
        }
    });

在我的本地机器上,XMLHttpRequest.responseText“一些特定的错误消息”

在生产环境中,XMLHttpRequest.responseText“处理请求时出错。”

本地环境是带有 IIS 7.5.7600.16385 的 windows 7 家庭高级版

生产环境为 Windows Server 2008 R2,IIS 7.5.7600.16385(与开发环境相同)

为什么会有差异,如何让生产环境抛出具体的错误?

********* 关注up .. tnx 贾斯汀 *************

我在 services 文件夹中添加了 web.config 文件(Doh...想知道为什么我没有想到这个)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
      <customErrors mode="Off" />
    </system.web>
</configuration>

【问题讨论】:

  • 检查 web.config 的 &lt;customErrors&gt; 部分。通常不希望向最终用户公开异常详细信息。
  • 对...但是有没有办法只为 Web 服务启用此功能?目前是 RemoteOnly
  • 这和我很久以前在这里stackoverflow.com/questions/8059780/…发布的问题完全相同
  • 您可以使用&lt;location&gt; 元素指定它仅适用于Web 服务,至少如果您将它们放在单独的文件夹中。我从来没有尝试过没有单独的文件夹。

标签: c# jquery ajax exception


【解决方案1】:

默认情况下,.NET 应用程序配置为仅向本地服务器显示特定的异常信息。

这是为了让攻击者无法根据他们的攻击获取有关您网站的特定异常信息。改变这种行为通常被认为是个坏主意。

如果必须,您可以更改:

<customErrors mode="RemoteOnly" />

收件人:

<customErrors mode="Off" />

如果您想显示 Services 文件夹的错误:

<location Path="/Services">
    <system.web>
        <customErrors mode="Off" />
    </system.web>
</location>

【讨论】:

  • 所以没有办法让它只可用于 Web 服务?它们都在一个名为“服务”的文件夹中
  • @robert - 更新了我的答案。只需将整个块添加到 元素。
  • 太棒了..我会试一试...顺便说一句你错过了>标签:)
  • @JustinNiessner 我们是否必须将此位置代码放在服务文件夹下?其中包含 asmx ?还是我们应该放入 main web.config ?
猜你喜欢
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2016-11-04
  • 2013-08-08
  • 2019-08-30
  • 1970-01-01
相关资源
最近更新 更多