我有一个MvC .Net Web应用程序,我正在对所有路由应用动作过滤器属性。如何配置它以使此过滤器不应用于我在WebApiConfig.cs中指定的特定路由(即“/ api / ignore”)?
在我的Globax.asax.cs中,我在Application_Start()中有这两行,所以这个过滤器被调用。
ISessionFilter sessionFilter = (ISessionFilter) DependencyResolver.Current.GetService<ISessionFilter>();
GlobalFilters.Filters.Add(sessionFilter);
这是我的过滤器:
public class SessionFilter : System.Web.Mvc.ActionFilterAttribute, System.Web.Mvc.IActionFilter, ISessionFilter
{
public SessionFilter()
{
}
void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)
{
//logic here
}
}
有干净的方法吗?我是否需要在我的过滤器类中硬编码要忽略的路径(我不想这样做)
答案 0 :(得分:3)
在Rails中有一些叫做的东西:skip_before_filter ...不幸的是,在.NET中你需要做这样的事情(基本上做一个虚拟属性,当你做一个动作时,取决于你喜欢的某些条件,停止该动作的执行):
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class HanlleyDisable : Attribute { }
public class SessionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
bool disabled = filterContext.ActionDescriptor.IsDefined(typeof(HanlleyDisable ), true) ||
filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(HanlleyDisable), true);
if (disabled)
return;
// action filter logic here...
}
}
class FooController {
[HanlleyDisable]
MyMethod() { ... }
}