我正在使用Windows身份验证创建MVC Intranet应用程序。访问的数据是特定于年份的,因此我需要一种方法来设置一个全局变量,无论是会话还是其他任何必须在执行任何查询之前设置的变量。
我无法找到强制用户登录的方法,因为他们已经通过他们的Windows登录凭据获得授权,因此使用属性强制登录似乎有问题。
我发现用户可以导航到任何特定页面,并尝试在没有定义年份的情况下提取数据并造成一些破坏。
我想做的是强制用户选择年份选择页面,如果尚未设置年份变量,则选择他们希望访问的年份。
我已经检查了相关问题,但它们似乎没有为我目前的难题提供答案。
答案 0 :(得分:1)
你可以编写一个自定义的ActionFilter,它放在你所有的控制器上(当然不是你必须选择年份的动作)。如果未选择年份,则重定向到控制器/操作,您可以在其中选择年份。
public class CheckYearAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(<YEAR IS NOT SET>)//redirect
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {{ "Controller", "YourController" },
{ "Action", "YourAction" } });
}
base.OnActionExecuting(filterContext);
}
}