我处理一个名为begin_request的请求。目前我使用Response.End()来停止asp.net继续执行其他操作。但是,Response.End()会抛出异常,是否有一种非异常方式可以结束请求?
如果你想知道为什么我没有文件,那是因为我通过http响应头告诉nginx要提供哪个文件,因此在asp.net中没有其他事情可做。 Response.End会抛出异常,需要收集堆栈信息等等。显然我不需要这些东西,从我以前的问题中我知道,抛出异常是很昂贵的。那么我该怎么做呢?
我处理一个名为begin_request的请求。目前我使用Response.End()来停止asp.net继续执行其他操作。但是,Response.End()会抛出异常,是否有一种非异常方式可以结束请求?
如果你想知道为什么我没有文件,那是因为我通过http响应头告诉nginx要提供哪个文件,因此在asp.net中没有其他事情可做。 Response.End会抛出异常,需要收集堆栈信息等等。显然我不需要这些东西,从我以前的问题中我知道,抛出异常是很昂贵的。那么我该怎么做呢?
HttpResponse.End()
是一种有意设计抛出异常的方法;这是为了让它能够正常工作。
只有当 ThreadAbortException
异常抛出时,渲染响应的线程才会结束。如果没有异常抛出,则响应不会结束。
另一个替代方法是调用 HttpContext.Current.ApplicationInstance.CompleteRequest
。这将通过直接跳转到 Application_EndRequest
事件来阻止进一步的代码执行。
Response.Redirect()
,它接受第二个布尔参数,表示它是否在内部调用Response.End()
。 - Cᴏʀʏ