在 ASP.NET Core 中,builder.Services.AddControllersWithViews
是一个用于配置应用程序以支持 MVC(Model-View-Controller)模式的扩展方法。它通常在应用程序的启动配置文件中使用,例如 Program.cs
或 Startup.cs
。这个方法的作用是注册 MVC 控制器和视图所需的依赖项和服务。
在 ASP.NET Core 中,使用 builder.Services.AddControllersWithViews(options => {...})
方法配置 MVC 控制器和视图时,可以通过 options.Filters.Add
添加全局过滤器。过滤器是 ASP.NET Core MVC 中用于在请求处理管道的特定阶段执行代码的组件。它们可以用于执行诸如日志记录、异常处理、授权检查等跨多个控制器和操作的通用逻辑。
以下是一些常见的过滤器类型和如何添加它们的示例:
常见过滤器类型
-
授权过滤器(Authorization Filters):用于检查用户是否具有执行特定操作的权限。
csharpoptions.Filters.Add(new AuthorizeAttribute());
-
异常过滤器(Exception Filters):用于捕获并处理操作执行过程中发生的异常。
csharpoptions.Filters.Add(new ExceptionFilterAttribute());
-
操作过滤器(Action Filters):在操作执行前后执行代码。
csharpoptions.Filters.Add(new MyActionFilter());
-
结果过滤器(Result Filters):在操作结果生成前后执行代码。
csharpoptions.Filters.Add(new MyResultFilter());
示例代码
以下是一个完整的示例,展示如何在 Program.cs
中配置全局过滤器:
var builder = WebApplication.CreateBuilder(args);// 添加控制器和视图支持,并配置全局过滤器
builder.Services.AddControllersWithViews(options =>
{// 添加全局授权过滤器options.Filters.Add(new AuthorizeAttribute());// 添加自定义操作过滤器options.Filters.Add(new MyActionFilter());// 添加异常过滤器options.Filters.Add(new ExceptionFilterAttribute());
});var app = builder.Build();// 配置中间件管道
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
});app.Run();// 自定义操作过滤器示例
public class MyActionFilter : IActionFilter
{public void OnActionExecuting(ActionExecutingContext context){// 在操作执行前执行的代码Console.WriteLine("Action is about to execute.");}public void OnActionExecuted(ActionExecutedContext context){// 在操作执行后执行的代码Console.WriteLine("Action has been executed.");}
}
解释
- AuthorizeAttribute:这是一个内置的授权过滤器,用于要求用户必须经过身份验证才能访问控制器或操作.
- MyActionFilter:这是一个自定义的操作过滤器,实现了
IActionFilter
接口。它在操作执行前后分别输出日志信息. - ExceptionFilterAttribute:这是一个内置的异常过滤器,用于捕获和处理操作执行过程中发生的异常.
通过在 AddControllersWithViews
方法中添加全局过滤器,你可以确保所有控制器和操作都会执行这些过滤器中的逻辑,从而实现代码的复用和统一的处理逻辑.