2013-07-30 3 views
1

В моих AdministratorController у меня есть действие с пользовательским атрибутом:Перенаправить на определенный вид в AuthorizeAttribute?

[AuthorizedOnly (Roles = "admin, superadmin")] 
public ActionResult Index() 
{...} 

Атрибутом является:

class AuthorizedOnlyAttribute : AuthorizeAttribute 
{ 
    public AuthorizedOnlyAttribute() 
    { 
     View = "~/Views/Main/Index.cshtml"; 
     Master = String.Empty; 
    } 
    public String View { get; set; } 
    public String Master { get; set; } 

    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 
     CheckIfUserIsAuthenticated(filterContext); 
    } 
    private void CheckIfUserIsAuthenticated(AuthorizationContext filterContext) 
    { 
     if(filterContext.Result == null) 
      return; 
     if(filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      if(String.IsNullOrEmpty(View)) 
       return; 
      var result = new ViewResult{ViewName = View, MasterName = Master}; 

      filterContext.Result = result; 
     } 
    } 

Он правильно показывает мне вид, что мне нужно: ~/Views/Main/Index.cshtml Но в моем браузере URL по-прежнему от администратора: .../Administrator/Index Как я могу перенаправить на представление, которое мне нужно, чтобы URL-адрес также изменился?

Большое спасибо!

ответ

2

Попробуйте

string retUrl = filterContext.HttpContext.Request.RawUrl; 
filterContext.Result = 
       new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary 
         {{ "controller", "Main" }, 
          { "action", "Home" }, 
          { "returnUrl", retUrl } }); 
+0

великолепно! Спасибо! –

+0

Добро пожаловать @GyuzalRakhmayeva – Amit

+0

Я добавил System.Web.Routing в мой проект, но Маршрутизация не найдена в пределах класса пользовательской авторизации, который я сделал, - это любые другие требуемые ссылки? – Jay