调用response.redirect时出现异常

时间:2012-02-09 09:20:38

标签: asp.net

我们有一个全局异常类,它抓取Web应用程序中的所有异常。一般响应是将用户重定向到错误页面。

现在,当从“更新”面板引发异常时,response.redirect会抛出一个异常,说明服务器在发送HTTP标头后无法清除标头。带有此堆栈跟踪:

  System.Web.Handlers.ScriptModule.EndRequestHandler(Object sender,System.Web.HttpResponse.ClearHeaders()上的

  EventArgs e)at   System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()       在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)

我已经尝试过, 1. JS脚本 2.清除标题和内容

3 个答案:

答案 0 :(得分:0)

有趣的问题。我以前从来没有这样,但这就是我发现的

http://aspdotnetcodebook.blogspot.com/2008/03/using-responseredirect-in-aspnet-ajax.html

希望有所帮助。

答案 1 :(得分:0)

我相信您可以使用页面请求管理器来处理异步回发错误。

http://msdn.microsoft.com/en-us/library/bb383810.aspx

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args)
{
    if (args.get_error() != undefined)
    {
       var errorMessage = args.get_error().message;
       args.set_errorHandled(true);
       ToggleAlertDiv('visible');
       $get(messageElem).innerHTML = errorMessage;
    }
}

答案 2 :(得分:0)

如何执行全局异常类?来自global.app_error?

此外,您可能已将true添加为Response.Redirect的第二个arg - 它会快速结束响应(在您的app_error执行之前)。这意味着服务器完成了向客户端发送字节:它已经计算了响应长度,在响应头中包含了该值,并且响应头已经被发送到客户端。你无法撤消(通过清除它们,或者无论如何)。

如果是这种情况(true arg),请尝试将其设置为false(或不提供第二个参数),看看会发生什么。