MVC自定义角色提供程序重定向到登录页面

时间:2013-02-06 22:37:17

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

您好我正在使用自定义角色提供程序,并且所有内容似乎都正常工作,如果用户具有允许权限,则会将其重定向到登录页面。

但我想知道的是,当他们被重定向到登录页面时,登录页面中是否有一种方法可以设置一条消息,说明访问被拒绝或者其他什么。 所以例如我想要像下面这样的东西,User.FailedCustomRole?我不确定某个地方是否存在这样的东西:

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

由于

1 个答案:

答案 0 :(得分: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)的div。如果未填充,这将呈现空白。

  • 第三种方法是创建一个自定义授权过滤器,该过滤器重定向并在V @(ViewData [“LoginError”]中设置错误消息。

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

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