如何将 Asp.NET 4.5 请求包装在 using { ... } 语句中?
How can I wrap an Asp.NET 4.5 request in a using { ... } statement?
为了更好地解释我想在 Asp.NET 4.5 中做什么,我将举例说明我是如何让它在 .NET Core 中工作的。
在 .NET Core 中,如果您希望请求的所有代码都使用单个对象,如果抛出异常,您可以使用 app.Use() 方法创建一个中间件Startup class 如下所示:
app.Use(async delegate (HttpContext Context, Func<Task> Next)
{
using (var TheStream = new MemoryStream())
{
//the statement "await Next();" lets other middlewares run while the MemoryStream is alive.
//if an Exception is thrown while the other middlewares are being run,
//then the MemoryStream will be properly disposed
await Next();
}
});
我怎样才能在 .NET 4.5 中做这样的事情?我正在考虑使用 Global.asax.cs 但我必须跨越所有各种事件(Application_Start、Application_AuthenticateRequest 等)的 using { ... } 语句,但我不这样做相信不可能。
I was thinking of using the Global.asax.cs
是的,使用 HttpApplication.BeginRequest
和 HttpApplication.EndRequest
这样的一对事件是在 ASP.NET pre-Core 上执行此操作的方法。
but I would have to span the using { ... } statement across all the various events
是的。您需要做的是将 using
逻辑拆分到这些事件中。例如,在 BeginRequest
事件中,执行 new MemoryStream()
并将其存储在请求上下文中。然后在 EndRequest
事件中,从请求上下文中检索 MemoryStream
并调用 Dispose
.
为了更好地解释我想在 Asp.NET 4.5 中做什么,我将举例说明我是如何让它在 .NET Core 中工作的。
在 .NET Core 中,如果您希望请求的所有代码都使用单个对象,如果抛出异常,您可以使用 app.Use() 方法创建一个中间件Startup class 如下所示:
app.Use(async delegate (HttpContext Context, Func<Task> Next)
{
using (var TheStream = new MemoryStream())
{
//the statement "await Next();" lets other middlewares run while the MemoryStream is alive.
//if an Exception is thrown while the other middlewares are being run,
//then the MemoryStream will be properly disposed
await Next();
}
});
我怎样才能在 .NET 4.5 中做这样的事情?我正在考虑使用 Global.asax.cs 但我必须跨越所有各种事件(Application_Start、Application_AuthenticateRequest 等)的 using { ... } 语句,但我不这样做相信不可能。
I was thinking of using the Global.asax.cs
是的,使用 HttpApplication.BeginRequest
和 HttpApplication.EndRequest
这样的一对事件是在 ASP.NET pre-Core 上执行此操作的方法。
but I would have to span the using { ... } statement across all the various events
是的。您需要做的是将 using
逻辑拆分到这些事件中。例如,在 BeginRequest
事件中,执行 new MemoryStream()
并将其存储在请求上下文中。然后在 EndRequest
事件中,从请求上下文中检索 MemoryStream
并调用 Dispose
.