繁体   English   中英

从Ajax调用中检索服务器端错误详细信息(C#)

[英]Retrieving server side error details (c#) from an ajax call

当我的应用程序进行ajax调用时,我抛出一个错误,并希望在我的客户端捕获它。 哪种方法是最好的。

我的服务器端代码是:

try
{
     ...
}
catch (Exception ex)
{
     throw new HttpException("This is my error", ex);
}

我的客户端代码是:

var url = $(this).attr('href');
var dialog = $('<div style="display:none"></div>').appendTo('body');

dialog.load(url, {}, 
    function (responseText, status, XMLHttpRequest) {

            if (status == "error") {
                alert("Sorry but there was an error: " + XMLHttpRequest.status + " " + XMLHttpRequest.statusText);
                return false;
            }
            ....

在运行时,调试时,我没有得到我的错误详细信息,如下面的屏幕截图所示:

在此处输入图片说明

我收到一般错误:

status: 500
statusText: Internal Server Error

如何获得发送的详细信息:“这是我的错误”?

最后我使用这种方法:

Web.config文件:

<system.web>
  <customErrors mode="On" defaultRedirect="~/error/Global">
    <error statusCode="404" redirect="~/error/FileNotFound"/>
  </customErrors>
</system.web>

ErrorController:

public class ErrorController : Controller
{
    public ActionResult Global()
    {
        return View("Global", ViewData.Model);
    }
    public ActionResult FileNotFound()
    {
        return View("FileNotFound", ViewData.Model);
    }
}

不要忘记创建2个特定视图。

最后,当我需要抛出特定的错误代码和描述时,我将像这样进行操作:

    public ActionResult MyAction()
    {
        try
        {
            ...
        }
        catch
        {
            ControllerContext.RequestContext.HttpContext.Response.StatusCode = 500;
            ControllerContext.RequestContext.HttpContext.Response.StatusDescription = "My error message here";
            return null;
        }
    }

然后,客户端会收到此类错误信息。

做这样的事情

服务器端:

try{
 //to try
}catch(Exception ex)
{
    return this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Error :"+ ex.Message);
}

然后,该请求将向JavaScript返回错误500,但带有您的异常消息。

您可以控制发送给客户端的详细错误消息。 默认情况下,只有通过从服务器本身浏览站点才能查看详细的错误消息。

要以这种方式从服务器端显示自定义错误,您需要在IIS configuration添加规则。

您可以阅读此主题,也许可以为您提供帮助: 如何在从客户端浏览器浏览时启用网站的详细错误消息?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM