[英]It's possible to ignore a ServiceFilter controller for one action only?
是否可以仅针对一个操作忽略 ServiceFilter 控制器并应用另一个 servicefilter? 在我的情况下,“MethodTwo”行动
[Route("api/test")]
[ServiceFilter(typeof(RequireFilter1))]
public class TestController : BaseApiController
{
public ActionResult MethodOne()
{
//Code
}
[ServiceFilter(typeof(RequireFilter2))]
public ActionResult MethodTwo(int id)
{
//Code
}
}
你好。
对于您的情况,两个过滤器都将在 MethodTwo 中执行。
在这里您可以阅读有关过滤器执行序列的更多信息 - ASP.NET Core 中的过滤器 - MSDN
因此,对于您的情况,您可以分析 RequireFilter1 中的现有操作属性,并且如果将任何其他 ServiceFilterAttribute 分配给操作,则不要执行它。 或者您可以创建将阻止 Controller 属性的属性。
例如(如果 ServiceFilterAttribute 附加到操作,则禁用控制器过滤器执行):
public void OnActionExecuting(ActionExecutingContext context)
{
var actDescr = (context.ActionDescriptor as ControllerActionDescriptor);
if (actDescr!=null)
{
var attrs = actDescr.MethodInfo.GetCustomAttributes(typeof(ServiceFilterAttribute),true);
if (attrs.Any())
return;
}
context.HttpContext.Response.Headers.Add("ActionFilterExample1",
new string[] { "test ActionFilterExample1", "test ActionFilterExample0" });
}
此外,您必须对过滤器的OnActionExecuted执行相同的操作。
另一种方法 - 创建单独的属性来禁用控制器属性:
public class DisableAttr : Attribute
{
}
并在 OnActionExecuting 中检查它:
actDescr.MethodInfo.GetCustomAttributes(typeof(DisableAttr),true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.