Ano*_*aly 6 c# asp.net-core-mvc .net-core
我曾在 .Net 4 上的 MVC 中工作,并且在控制器类中覆盖了我的操作过滤器。这样我就可以拥有多个控制器,每个控制器都有一个独特的OnActionExecuting方法。
现在我正在开发 Dotnet Core 2.1,情况有些不同,所以我无法使用相同的方法。我有一个用于继承的 API 的控制器ControllerBase,然后是另一个用于服务页面的控制器,该控制器继承了Controller. 我创建了派生自ActionFilterAttribute.
然后我使用这一行注册了我的动作过滤器:
services.AddMvc(config => { config.Filters.Add(typeof(MyActionFilter)); })
Run Code Online (Sandbox Code Playgroud)
问题是过滤器现在适用于 API 控制器和页面控制器。有没有办法将操作过滤器仅应用于特定控制器?
我使用此页面作为我的初始操作过滤器实现的参考。
我知道在OnActionExecuting方法内部我可以使用context.Controller.GetType()它与我的各个控制器的类型进行比较,但我宁愿避免这种情况,而是指定哪些控制器应该使用哪些操作过滤器。
提前致谢。
小智 6
services.AddMvc(config => { config.Filters.Add(typeof(MyActionFilter)); })
Run Code Online (Sandbox Code Playgroud)
当您想要应用全局过滤器时,使用上面的源代码,这意味着每个 API 都会受到影响。
因此,对于特定的特定控制器,您只需将 [MyActionFilter] 属性添加到您的控制器即可
例子:
[MyActionFilter]
public class HomeController : Controller {
public ViewResult Index(){..}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
services.AddScoped<"---FilterNameHere----">();
Run Code Online (Sandbox Code Playgroud)
[ServiceFilter(typeof("----FilterNameHere---"))]
public class HomeController : ControllerBase
{
public IActionResult Index()
{//do your code here}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4049 次 |
| 最近记录: |