如何通过 OWIN 实现 global.asax 事件 [英] How to implement global.asax events by OWIN
问题描述
从 asp.net 6 开始不会有名为 global.asax 的文件,但 global.asax 有很多类似的事件
from asp.net 6 there would be no file called global.asax but global.asax has many events like
· Application_Init
· Application_Init
· Application_Start
· Application_Start
· Session_Start
· Session_Start
· Application_BeginRequest
· Application_BeginRequest
· Application_EndRequest
· Application_EndRequest
· Application_AuthenticateRequest
· Application_AuthenticateRequest
· Application_Error
· Application_Error
· Session_End
· Session_End
· 申请结束
比如说我经常使用 Application_BeginRequest
事件来重定向用户.这是一个示例代码
say for example i often work with Application_BeginRequest
event to redirect user. here is a sample code
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("content.aspx?content=gm-mdi-diagnostic-tool"))
{
Response.RedirectPermanent("http://shop.bba-reman.com/product-category/diagnostic-tools/oem-diagnostic-tools/", true);
}
else if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("content.aspx?content=landrover_rover_t4_testbook_lite_diagnostic_tool_ids"))
{
Response.RedirectPermanent("http://shop.bba-reman.com/shop/oem-diagnostic-tools/land-rover-t4-mobile/", true);
}
else if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("content.aspx?content=ford_ids_main_dealer_tool_mazda_jaguar_landrover"))
{
Response.RedirectPermanent("http://shop.bba-reman.com/product-category/diagnostic-tools/oem-diagnostic-tools/", true);
}
else if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("content=coda_fuelling_tester_dynamically_measure_fuel_flow_and_pressure_in_situ_under_load"))
{
Response.RedirectPermanent("http://shop.bba-reman.com/product-category/diagnostic-tools/", true);
}
}
那么告诉我如何对 OWIN 做同样的事情?与代码示例讨论.
so tell me how to do the same with OWIN ? discuss with code sample.
还告诉我如何从OWIN 类代码
中捕获会话开始/结束或应用程序开始或结束
?
also tell me how to capture session start / end or application start or end
from OWIN class code
?
请讨论谢谢
推荐答案
如果您需要在每次请求之前执行一些自定义,我建议您使用标准方式:创建一个中间件并将其插入到 HTTP 请求管道中.
If you need to execute some custom before each request, I recommend you to use the standard way : create a middleware and insert it in the HTTP request pipeline.
创建中间件的方法有很多,但是为了清晰和可维护性,创建一个新的类是一个不错的选择.这是一个例子:
There is many ways to create a middleware, but for clarity and maintainability, create a new class is a good choice. Here is an exemple :
public class MyMiddleware
{
private readonly RequestDelegate next;
public MyMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
this.BeginInvoke(context);
await this.next.Invoke(context);
this.EndInvoke(context);
}
private void BeginInvoke(HttpContext context)
{
// Do custom work before controller execution
}
private void EndInvoke(HttpContext context)
{
// Do custom work after controller execution
}
}
接下来只剩下注册中间件了.这是在 Startup 类的 Configure 方法中完成的:
Next it only remains to register the middleware. This is done in the Configure method of Startup class :
public class Startup
{
public void Configure(IApplicationBuilder app)
{
...
app.UseMiddleware<MyMiddleware>();
...
}
}
就是这样.忘记 global.asax ;-)
That's all. And forget global.asax ;-)
这篇关于如何通过 OWIN 实现 global.asax 事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!