南山区住房与建设局官方网站wordpress 搜狐视频
news/
2025/9/30 15:02:22/
文章来源:
南山区住房与建设局官方网站,wordpress 搜狐视频,网站建设 设计那种连接线厂家,平凉市建设局门户网站在 ASP.NET Core 中#xff0c;过滤器#xff08;Filters#xff09;是一种在 MVC 应用程序中运行代码的方法#xff0c;可以在操作#xff08;Actions#xff09;执行之前或之后运行。过滤器可以应用于控制器#xff08;Controllers#xff09;或特定的操作方法。过滤…在 ASP.NET Core 中过滤器Filters是一种在 MVC 应用程序中运行代码的方法可以在操作Actions执行之前或之后运行。过滤器可以应用于控制器Controllers或特定的操作方法。过滤器可以用来实现跨切面的逻辑比如异常处理、授权、缓存、日志等。
有几种类型的过滤器
授权过滤器Authorization filters资源过滤器Resource filters操作过滤器Action filters异常过滤器Exception filters结果过滤器Result filters
自定义过滤器通常通过实现特定的过滤器接口来创建如 IAuthorizationFilter, IResourceFilter, IActionFilter, IExceptionFilter, IResultFilter或者通过继承 Filter 的抽象类如 ActionFilterAttribute。
过滤器的注入方式
构造函数注入在 ASP.NET Core 中过滤器是通过依赖注入DI容器中注册的服务来解析的。这意味着可以在自定义过滤器的构造函数中注入所需的依赖。
示例
public class MyCustomFilter : IActionFilter
{private readonly IMyDependency _myDependency;public MyCustomFilter(IMyDependency myDependency){_myDependency myDependency;}public void OnActionExecuting(ActionExecutingContext context){// 使用 _myDependency}public void OnActionExecuted(ActionExecutedContext context){// 其他逻辑}
}注 这种方式要求过滤器本身也需要通过服务注册添加到 DI 容器
services.AddScopedIMyDependency, MyDependency();
services.AddScopedMyCustomFilter();服务查找在过滤器内部通过服务定位器模式来解析服务。这通常在无法直接使用构造函数注入的情况下使用例如使用属性注入或基于属性的过滤器。
示例
public class MyCustomFilter : IActionFilter
{private IMyDependency _myDependency;public void OnActionExecuting(ActionExecutingContext context){_myDependency context.HttpContext.RequestServices.GetServiceIMyDependency();// 使用 _myDependency}public void OnActionExecuted(ActionExecutedContext context){// 其他逻辑}
}这种方法虽然方便但有时会被认为是一个反模式因为它违反了依赖注入的原则并且使得依赖关系隐蔽而不是显式的。
通过 TypeFilter 或 ServiceFilter 属性注入当你希望在过滤器属性中指定组件类型并通过依赖注入容器来解析依赖时可以使用 TypeFilter 或 ServiceFilter 属性。这两个属性允许您将服务添加到过滤器并通过属性的方式应用到控制器或动作方法。
示例 (TypeFilter):
[TypeFilter(typeof(MyCustomFilter))]
public class MyController : Controller
{// 控制器动作
}// 或者在 Action 上[TypeFilter(typeof(MyCustomFilter))]
public IActionResult MyAction()
{// 动作逻辑
}示例 (ServiceFilter):
[ServiceFilter(typeof(MyCustomFilter))]
public class MyController : Controller
{// 控制器动作
}// 或者在 Action 上[ServiceFilter(typeof(MyCustomFilter))]
public IActionResult MyAction()
{// 动作逻辑
}注意 ServiceFilter 需要过滤器类型已经被注册到依赖注入容器。
使用 AddMvcOptions 或 AddControllers 添加全局过滤器全局过滤器适用于所有控制器和操作方法。
services.AddControllers(options
{options.Filters.AddMyCustomFilter(); // 添加自定义全局过滤器
});这些都是 ASP.NET Core 中注入自定义过滤器的常用方法。选择最佳方法主要取决于场景和需求例如是否需要全局应用过滤器或者是否希望通过依赖注入来解耦过滤器和它的依赖。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922970.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!