如何在 OnBeginRequest 中干净地终止 HTTP 事务?

How can I cleanly terminate HTTP Transaction in OnBeginRequest?

我正在编写一个带有 HTTP 接口的普通事务处理程序。客户在 POST.

正文中发布交易详情

我真正需要的是 OnBeginRequest 处理程序。当我深入了解这个事件时,我已经完成了。无需继续服务器上的 IIS 管道处理。

所以我在底部放了一个Response.End。这个 'works' 但是它确实抛出了一个异常,我只是捕获并抑制了它。

  1. 我应该从性能或质量的角度考虑这个问题吗?

  2. 有没有办法更干净地完成这个?

    private void OnBeginRequest(object sender, EventArgs e)
    {
        HttpContext ctx = HttpContext.Current;
    
        try
        {
            if (ctx.Request.RequestType == "POST" && ctx.Request.IsSecureConnection)
            {
                // Here's where processing is implemented...
    
               ctx.Response.StatusCode = 200;
               ctx.Response.Write("OK");
            }
            else
            {
               ctx.Response.StatusCode = 403;
               ctx.Response.Write("BAD");
            }
        }
        catch (Exception ex)
        {
            ctx.Response.StatusCode = 500;
            ctx.Response.Write("ERROR");
        }
    
        try
        {
            ctx.Response.End();
        }
        catch { }
    }
    

在我看来,这是使用 Response.End 终止请求的唯一方法。您可以尝试的另一件事是 HttpContext.Current.ApplicationInstance.CompleteRequest();这将结束对请求的所有进一步处理。您的处理程序不是管道中唯一的处理程序,因此这将取消对您之后的其他处理程序的进一步处理,并立即将响应发送给客户端。

HttpApplication.CompleteRequest Method