PRB: 如何发生,如果使用 Response.End,Response.Redirect 或 Server.Transfer

本文的发布号曾为 CHS312629
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 312629
症状
如果您使用的Response.EndResponse.RedirectServer.Transfer方法,将引发异常时发生。您可以使用try-catch语句可以捕捉此异常。
原因
Response.End方法结束执行页,并将执行切换到应用程序的事件管道中的Application_EndRequest事件。按照Response.End的代码的行不会被执行。

因为这两种方法都会内部调用Response.EndResponse.RedirectServer.Transfer方法中发生此问题。
解决方案
要解决此问题,请使用下列方法之一:
  • 对于 Response.End调用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 若要跳过对代码执行 Application_EndRequest 事件。
  • 对于 Response.Redirect使用重载时, Response.Redirect (url 字符串、 布尔值 endResponse) 传递 对于 endResponse 若要取消内部调用的参数 Response.End.例如:
      Response.Redirect ("nextpage.aspx", false);						
    如果您使用此替代方法,该代码的后面 Response.Redirect 执行。
  • 对于 Server.Transfer使用 Server.Execute 方法相反。
状态
这种现象是设计使然。

属性

文章 ID:312629 - 上次审阅时间:09/23/2013 04:33:00 - 修订版本: 2.0

Microsoft ASP.NET 4.5, Microsoft ASP.NET 4.0, Microsoft ASP.NET 3.5, Microsoft ASP.NET 2.0, Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbexcepthandling kbprb kbmt KB312629 KbMtzh
反馈