2014-12-12 5 views
2

по умолчанию У меня есть следующий:MVC5 [Авторизоваться] перенаправлять маршрут вместо атрибута маршрута

[Route("whitelist")] 
    [Authorize(Roles = "Administrator")] 
    public ActionResult Whitelist() { 
     var vm = new WhitelistViewModel(); 
     return View(vm); 
    } 

    [Route("login")] 
    [AllowAnonymous] 
    public ActionResult Login(string returnUrl) { 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

Однако, когда я перейти к /whitelist как неаутентифицированному пользователю, я получаю навигацию к/счету/Login, который инвалид. Как сообщить MVC5 использовать маршруты атрибутов при перенаправлении в этом случае?

+0

Почему это недействительно? У вас есть '[Authorize (Roles =" Administrator ")]' в '' Whitelist() ', поэтому, если вы не авторизованы, вы будете перенаправлены на' Login() '. Что вы ожидаете? –

+0

@StephenMuecke это недействительно, потому что маршрут к Login - это «логин», как переопределенный с помощью маршрутизации атрибутов. – user666

+0

Пожалуйста, посмотрите на это http://stackoverflow.com/questions/7080872/redirect-authorization-failure-in-mvc Переопределить OnActionExecuting. Мы можем сделать много вещей в этом действии, подобно тому, как мы делаем что-то в предварительной загрузке страницы до page_load. –

ответ

9

В App_Start/Startup.Auth.cs, вам необходимо изменить свой путь по умолчанию для входа в переадресации.

LoginPath = new PathString("/login") 

Причина в том, что вы добавили маршрут атрибута, тогда существующий маршрут недействителен.

1

Я копирую с некоторого веб-сайта, я использую блокнот для объединения, но в идеале здесь.

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     IPrincipal user = filterContext.HttpContext.User; 
     if (!user.Identity.IsAuthenticated) 
     { 
      // Redirect to login page 
      filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary 
       { 
        { "controller", "Login" }, 
        { "action", "NoAccess" } 
       }); 
     } 
    } 
+0

С помощью этого задания роли с помощью 'Authorize (Roles =" Admin ")' больше не работает (роли не распознаются). – SB2055

+0

Привет, SB2005 вы имеете в виду Роли = "Admin" даст ошибку? –

+0

Да, он остается красным/ошибка в VS, если я использую переопределенный атрибут:/ – SB2055

Смежные вопросы