gpt4 book ai didi

asp.net - 如何使用 AJAX 错误发出服务器端重定向

转载 作者:行者123 更新时间:2023-12-04 05:54:23 26 4
gpt4 key购买 nike

我有以下设置:

  • Web.config 有 customErrors mode="Off"
  • Global.Application_Error() 事件调用名为 UtilitiesWeb.ProcessError() 的自定义函数
  • UtilitiesWeb.ProcessError() 记录错误,然后重定向用户: HttpContext.Current.Response.Redirect(defaultErrorPage, false)

  • 这作为一个很好的全局错误处理程序工作得很好,除非在处理 AJAX 时。 AJAX 在 JavaScript 中显示错误,并忽略重定向。

    为了让页面在 AJAX 错误时重定向,我必须执行以下操作:
  • 将 asp:ScriptManager 更新为: OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" >
  • 添加调用UtilitiesWeb.ProcessError()的服务器端ScriptManager1_AsyncPostBackError方法
  • 添加以下 JavaScript 以进行重定向,因为 AJAX 会忽略服务器端重定向:

  • <script type="text/javascript">
    if (typeof (Sys) != 'undefined') {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest);
    function endRequest(sender, e) {
    if (e.get_error()) {
    window.location = "ErrorPage.aspx"
    }
    }
    }
    </script>


    但这一切似乎都是一种解决方法。有没有办法让服务器端重定向适用于 AJAX 错误?

    为了完整起见,以下是 UtilitiesWeb.ProcessError() 的代码:
    public static void ProcessError()
    {
    string defaultErrorPage = ConfigurationManager.AppSettings["DefaultErrorPage"];
    string displayError = ConfigurationManager.AppSettings["DisplayError"];
    Exception ex;

    if (!string.IsNullOrWhiteSpace(displayError))
    displayError = displayError.ToLower();

    ex = HttpContext.Current.Server.GetLastError();

    if (ex != null)
    Log.LogException(DateTime.Now, null, ex);

    // Redirect to Default Error page on error
    if (displayError == "basic")
    {
    HttpContext.Current.Server.ClearError(); // needed for redirect to work

    if (!string.IsNullOrWhiteSpace(defaultErrorPage))
    HttpContext.Current.Response.Redirect(defaultErrorPage, false); // doesn't work with AJAX calls
    }
    }

    最佳答案

    当您发出 AJAX 请求时,您只会得到一个包含某种数据的响应,这些数据由客户端的脚本解释。

    因此,万一出现错误,服务器唯一能做的就是在对 ajax 请求的响应中发送错误。

    此时,客户端脚本接收到错误信息,您可以随意使用。你这样做是正确的。

    但是,如果您需要采取一些额外的操作,例如记录错误,您有两个选择:

    1) 将错误从 javascript 发送回服务器:例如,您可以使用带有隐藏类型输入的常规表单,设置输入值,然后使用 form.submti() 将表单发布到您的错误页面。您的页面可以使用页面的请求对象恢复隐藏字段的内容并对其进行处理。

    2) 在服务器端捕获错误,在 try/catch 或 page_error 或 application_error 事件中,记录异常,或任何你想用它做的事情,并抛出一个将到达客户端的新异常,隐藏原始异常信息。

    第二个选项更干净、更安全,因为您不会向浏览器发送错误信息。

    认为服务器不能以任何方式重定向浏览器,因为当服务器发送对 AJAX 请求的响应时,服务器没有为浏览器呈现新页面,浏览器也没有收到新的整个页面。服务器只是发送一些信息以供客户端脚本处理。因此,您的脚本负责重新加载新页面或您需要执行的任何操作。

    关于asp.net - 如何使用 AJAX 错误发出服务器端重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692354/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com