【问题标题】:Alternative to Response.End()?Response.End() 的替代方案?
【发布时间】:2011-12-13 14:42:02
【问题描述】:

我处理一个请求 begin_request。目前我使用 Response.End() 来阻止 asp.net 做任何其他事情。 Response.End() 抛出异常是否有非异常方式可以结束请求?

如果你想知道为什么我没有它的 bc 文件,我告诉 nginx 通过 http 响应头提供什么文件,因此我在 asp.net 中无事可做。 Response.End 抛出一个异常,该异常必须收集堆栈信息和所有这些信息。我显然不需要那个,从我过去的问题中我知道抛出异常是昂贵的。那我该怎么办呢?

【问题讨论】:

标签: asp.net


【解决方案1】:

HttpResponse.End() 故意抛出异常;它必须工作。

只有当ThreadAbortException 被抛出时,渲染响应的线程才会结束。如果没有异常,则响应不会结束。

另一种选择是致电HttpContext.Current.ApplicationInstance.CompleteRequest。这将通过直接跳转到Application_EndRequest 事件来阻止进一步的代码执行。

【讨论】:

  • 是的,那我怎么不得到异常呢?我在编辑之前看到了你的答案,我没有看到 msdn 中的过载,也没有看到自动完成 msdn.microsoft.com/en-us/library/…
  • @acidzombie24:你说得对,这就是我编辑的原因。重载的方法是Response.Redirect(),它接受第二个布尔参数,表示它是否在内部调用Response.End()
【解决方案2】:

调用 HttpContext.Current.ApplicationInstance.CompleteRequest() 方法而不是 Response.End 绕过代码执行到 Application_EndRequest 事件

http://support.microsoft.com/kb/312629

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2015-03-03
    • 2015-09-25
    • 2019-12-16
    • 2011-06-20
    • 2015-11-03
    相关资源
    最近更新 更多