繁体   English   中英

是否可以仅针对一项操作忽略 ServiceFilter 控制器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM