ASP.NET MVC重定向条件符合所有请求

时间:2015-07-13 12:22:45

标签: c# asp.net asp.net-mvc redirect

我希望根据条件实施网站范围重定向到我的MVC5应用。

我已经研究过将[Authorize]添加到我的基本控制器,但这不足以因为我的网站在Windows身份验证上运行但我需要验证用户是否存在于一个单独的业务拥有的层次结构中与AD无关。

我已经研究了过滤器,并了解此处可能需要自定义操作过滤器。我是否正在尝试以正确的方式实现这一点,这应该在项目中的哪个位置?

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if(StaffId == 0)
    {
        filterContext.Result = RedirectToAction("Error");
    }
}

2 个答案:

答案 0 :(得分:2)

创建自定义授权属性,例如:

public class StaffOnlyAttribute : AuthorizeAttribute
{
  protected override bool AuthorizeCore(HttpContextBase httpContext)
  {
      return StaffId != 0;
  }

  protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
  {
      base.HandleUnauthorizedRequest(filterContext);
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "YourController", action = "Error" }));
  }
}

答案 1 :(得分:0)

如果您的用户数量很少,我会将所有ID存在于一个单独的业务拥有的层次结构中的缓存中(这将以一定的间隔从数据库刷新自己)以节省时间,因此您不会每个请求的数据库。

替代方法是在登录后显示一个永不过期的cookie,表明它们也属于该独立的业务拥有的层次结构。然后您可以读取该cookie并执行重定向。可能需要加密该cookie。根据你的要求。