【问题标题】:MVC 5 Windows Authentication redirectMVC 5 Windows 身份验证重定向
【发布时间】:2015-02-12 09:20:32
【问题描述】:

我创建了一个 MVC 5 项目并使用 Windows 身份验证。 我的问题是,每当操作属性 [Authorize(Roles = "Roelabc")] 拒绝用户的操作时,浏览器都会弹出带有用户名/密码的登录警报。 现在我不想弹出这个,我只想在用户被拒绝时将用户重定向到自定义页面。 非常感谢。

【问题讨论】:

    标签: model-view-controller


    【解决方案1】:

    创建一个派生自 AuthorizeAttribute 的类,将解决我的问题。

    public class WindowsAuthorize : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                base.OnAuthorization(filterContext);
    
                if (filterContext.Result is HttpUnauthorizedResult)
                {
                    filterContext.Result = new RedirectToRouteResult(
                        new RouteValueDictionary
                    {
                        { "client", filterContext.RouteData.Values[ "client" ] },
                        { "controller", "Home" },
                        { "action", "Contact" },
                        { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
                    });
                }
            }
        }
    

    并像这样使用它

    [WindowsAuthorize(Roles = "User1")]
    [HttpGet]
    public ActionResult Index(string runDate = "")
    { ... }
    

    【讨论】:

      【解决方案2】:

      您可以创建一个名为 unathorized 的视图。在您的登录类中,只需重定向到该视图。你可以在 logon.cs 中使用类似的东西

      if (AuthenticateUser())
              {
                  if (CheckRulesOfBehavior())
                  {
                      AuthorizeUser();
                      HttpContext.Response.Redirect("~/Work/Index");
                  }
          else
              {
                HttpContext.Response.Redirect("~/Errors/Unauthorized");
              }
      

      【讨论】:

      • 您好,windows认证没有登录功能。一样的感谢。我通过覆盖默认的 Authorize 属性找到了解决方案。请参阅下面的帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      相关资源
      最近更新 更多