如何在 OnBeginRequest 中干净地终止 HTTP 事务?
How can I cleanly terminate HTTP Transaction in OnBeginRequest?
我正在编写一个带有 HTTP 接口的普通事务处理程序。客户在 POST.
正文中发布交易详情
我真正需要的是 OnBeginRequest 处理程序。当我深入了解这个事件时,我已经完成了。无需继续服务器上的 IIS 管道处理。
所以我在底部放了一个Response.End。这个 'works' 但是它确实抛出了一个异常,我只是捕获并抑制了它。
我应该从性能或质量的角度考虑这个问题吗?
有没有办法更干净地完成这个?
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();这将结束对请求的所有进一步处理。您的处理程序不是管道中唯一的处理程序,因此这将取消对您之后的其他处理程序的进一步处理,并立即将响应发送给客户端。
我正在编写一个带有 HTTP 接口的普通事务处理程序。客户在 POST.
正文中发布交易详情我真正需要的是 OnBeginRequest 处理程序。当我深入了解这个事件时,我已经完成了。无需继续服务器上的 IIS 管道处理。
所以我在底部放了一个Response.End。这个 'works' 但是它确实抛出了一个异常,我只是捕获并抑制了它。
我应该从性能或质量的角度考虑这个问题吗?
有没有办法更干净地完成这个?
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();这将结束对请求的所有进一步处理。您的处理程序不是管道中唯一的处理程序,因此这将取消对您之后的其他处理程序的进一步处理,并立即将响应发送给客户端。