asp.net mvc core管道及拦截器的理解

今天来看一下asp.net core的执行管道。先看下官方说明:

进入mvc管道后,根据以上顺序执行过滤校正。

OK,根据以上说明下面我们新建一个MVC的演示,将执行方式切换为控台运行:

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
 services.AddControllersWithViews(config=> 
 {
  Console.WriteLine("execute C");
  //config.Filters.Add(new AsyncAuthorizationFilter());
  config.Filters.Add(new AuthorizationFilter());
  config.Filters.Add(new ResourceFilter());
  //config.Filters.Add(new AsyncResourceFilter());
  config.Filters.Add(new ActionFilter());
  //config.Filters.Add(new AsyncActionFilter());
  config.Filters.Add(new ResultFilter());
  //config.Filters.Add(new AsyncResultFilter());
  config.Filters.Add(new ExceptionFilter());
  //config.Filters.Add(new AsyncExceptionFilter());
  Console.WriteLine("execute D");
 });
 services.AddSession(config=> {
  Console.WriteLine("execute E");
 });
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
 if (env.IsDevelopment())
 {
  app.UseDeveloperExceptionPage();
 }
 else
 {
  app.UseExceptionHandler("/Home/Error");
 }
 app.UseStaticFiles();
 app.UseRouting();
 app.UseAuthorization();
 app.Use(async (context, next) =>
 {
  Console.WriteLine("execute F");
  await context.Response.WriteAsync("hello world");
  Console.WriteLine("execute G");
 });
 //app.UseSession();
 app.UseEndpoints(endpoints =>
 {
  Console.WriteLine("execute A");
  endpoints.MapControllerRoute(
   name: "default",
   pattern: "{controller=Home}/{action=Index}/{id?}");
  Console.WriteLine("execute B");
 });
}

执行结果:

 定义一个异常看下结果:

public IActionResult Privacy()
{
  throw new Exception("error");
}

ok,目标达成,不多说了,下次再看拦截器具体实现。

参考文档:ASP.NET Core 中的筛选器

总结

到此这篇关于asp.net mvc core管道及拦截器的文章就介绍到这了,更多相关asp.net mvc core管道及拦截器内容请搜索来客网以前的文章或继续浏览下面的相关文章希望大家以后多多支持来客网!