2

嗨,我正在使用自定义角色提供程序,并且一切似乎都工作正常,如果用户有权限,则他们被允许进入,如果没有,他们将被重定向到登录页面。

但我想知道的是,当他们被重定向到登录页面时,是否有办法在登录页面中设置一条消息,说明访问被拒绝或其他内容。因此,例如,我想要如下所示的 User.FailedCustomRole?我不确定这样的东西是否存在于某处的对象中:

    [AllowAnonymous]
    public ActionResult Login()
    {
        if (User.FailedCustomRole) {
            ViewBag.Message = "No access to this page";
        }
        return View();
    }

谢谢

4

1 回答 1

2
  • 一种方法是更改​​ web.config 以将用户重定向到参数为 1 的登录页面。

更改您的登录操作以采用可为空的 int,如果设置,则添加模型状态错误

   public ActionResult LogOn(int? id)
    {
        //int id = Request.QueryString[;
        if (id != null)
        {
            LogOnModel model = new LogOnModel();
            ModelState.AddModelError("", "Please Login to use this page");

            return View(model);
        }
  • 第二种方法是创建一个操作过滤器来检查登录并重定向设置 Viewbag.LoginError

    public class CheckLoginFilterAttribute : ActionFilterAttribute
    {
        public override void onactionexecuting(ActionExecutedContext filterContext)
        {
                    if (Membership.GetUser() != null)
                    {
                 Viewbag.LoginError = "Please Login to use this page";
                filterContext.Result = new RedirectToRouteResult(
        new System.Web.Routing.RouteValueDictionary {
            {"controller", "Account"}, {"action", "Logon"}
                    }
            {
    
            }
        base.OnActionExecuted(filterContext);
    }   
    

    向您的登录页面添加一个显示@(Viewbag.LoginError). 如果未填充,这将呈现空白。

  • 第三种方法是创建一个自定义授权过滤器,该过滤器重定向并在 V@(ViewData["LoginError"].

向您的登录页面添加一个显示@(ViewData["LoginError"]. 如果未填充,这将呈现空白。

请注意,我对最后一种方法不太确定或不满意。

于 2013-02-06T23:04:50.883 回答