2015-06-19 2 views
1

Я использую настраиваемый фильтр, который проверяет права доступа пользователя к определенному действию, и у меня есть область под названием Admin. Когда фильтр перенаправляет неавторизованный пользователь, его перенаправленная внутренняя область, но не вид в каталоге маршрута.
Например, когда я обращаюсь к http://localhost/admin/roles, я ожидаю, что неавторизованный пользователь будет переназначен до http://localhost/authorized, но не до http://localhost/admin/authorized, как сейчас.
Вот как я использую фильтр:Использовать RedirectToRouteResult с Area failed

public override void OnAuthorization(AuthorizationContext filterContext) 
     { 
      DigitalHubOnlineStoreEntities db = new DigitalHubOnlineStoreEntities(); 
      RbacUser requestingUser = new RbacUser(); 
      var controllerid = RbacUser.GetControllerId(filterContext.ActionDescriptor.ControllerDescriptor.ControllerName); 
      var actionid = RbacUser.GetActionId(filterContext.ActionDescriptor.ActionName, controllerid);   
      if (!requestingUser.GetUserPermission(HttpContext.Current.User.Identity.Name, actionid, controllerid)) 
      { 
       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Unauthorized" } }); 
      } 
     } 

ответ

6

Вы должны указать Area с отдельной пустой строкой:

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary 
         { 
          { "action", "Index" }, 
          { "controller", "Unauthorized" }, 
          { "Area", String.Empty } 
         }); 
+0

Спасибо большое. На самом деле я предполагаю что-то подобное. –

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