我有很多不同的控制器,每个都包含很多 ActionResult方法,它们会返回不同的视图。
在我的程序中,您可以在开始使用之前设置变量。我将变量存储在 Session 。
中目前,我的大多数控制器都使用相同的 if-sentence 方法。 示例:
if (Session["myVariable"] == null)
{
return RedirectToAction("/../Cons/SetVariable");
}
我想要的是不要在我的所有控制器方法中编写这个逻辑。也许有一种方法可以用逻辑或类似的东西扩展一个新的控制器?
我希望有人能理解我的问题并提供帮助。
答案 0 :(得分:2)
您可以使用MVC / WebAPI的过滤器属性来执行检查和使用上下文来执行操作
public class VariableCheckerValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext
filterContext)
{
if(filterContext.HttpContext.Session["myVariable"] == null)
{
filterContext.Result = new RedirectToRouteResult("/../Cons/SetVariable", filterContext.RouteData.Values);
}
}
}
然后将动作过滤器注册为全局过滤器,它将自动应用于应用程序中的每个操作。
在WebApiConfig中(对于WebAPI项目),通常在Register
方法中添加:
config.Filters.Add(new VariableCheckerValidationAttribute());
或者,根据需要应用于控制器或操作级别。
如果您决定转到全局应用程序,并且您有一个不需要它的操作,那么您需要在策略之外创建一个“异常”属性,并更新上面的属性代码以进行测试如果存在'exception'属性,那么在那种情况下不应用检查。