2015-05-21 3 views
0

Я использую orchardcms 1.9 (без создания тэга). Я пишу настраиваемый модуль, который реализует свой собственный контроллер, который вызывает службу, которая проверяет некоторую информацию и на основе ответа службы я либо перенаправляю, либо оставляю пользователя на странице.Вид с пользовательского контроллера, переопределяющего вид по умолчанию

Модуль находится на уровне по умолчанию, другими словами, он находится на каждой странице. Поэтому, когда пользователь пытается войти в систему или зарегистрировать этот модуль, обычно проверяет информацию.

Это мой маршрут:

new RouteDescriptor { 
        Priority = -1, 
        Route = new Route(
         "{*path}", // this is the name of the page url 
         new RouteValueDictionary { 
          {"area", "modulename"}, // this is the name of your module 
          {"controller", "controllername"}, 
          {"action", "Redirect"} 
         }, 
         new RouteValueDictionary(), 
         new RouteValueDictionary { 
          {"area", "modulename"} // this is the name of your module 
         }, 
         new MvcRouteHandler()) 

и это мой контроллер:

public ActionResult Redirect() 
     { 
      String response = _authService.VerifyRegistration(_orchardServices.WorkContext.CurrentUser); 

     if (response.Equals("2")) 
     { 
      Response.Redirect("~/Registration"); 
     } 
     else if (response.Equals("3")) 
     { 
      Response.Redirect("~/Users/Account/LogOn"); 
     } 


     return View(); 
    } 

Что происходит, что, когда я иду на регистрацию или контроллер Логин триггеров, проверяет инфокоммуникационных, говорит не редирект необходимо, а затем возвращает вид. Но поскольку представление пустое, моя страница пуста, а не форма входа/регистрации по умолчанию.

Как я могу это решить? Я ошибаюсь в маршрутизации, что как-то переопределяю представление по умолчанию (я пробовал разные приоритеты, но тот же ответ).

+0

Вы не должны использовать 'Response.Redirect' (или даже' Response', если на то пошло) из действия контроллера. Вместо этого используйте результат перенаправления. –

+0

Да, я искал это, но проблема, когда не перенаправление, по-прежнему остается прежним, возвращаемое представление переопределяет представление по умолчанию страницы входа/регистрации. Я верю, что это из-за маршрутов, которые переопределяют действие по умолчанию, но не знают, как этого избежать. –

+0

Ну, не совсем ясно, что вы ожидаете, должно случиться. –

ответ

1

Ваш маршрут отменяет все маршруты ({* путь}. Поэтому, когда вы перенаправляете, вы перенаправляете на .... ваш перенаправитель, я думаю. Поэтому представление, которое вы просматриваете, является тем, которое для вашего контроллера, а не страницы, после чего

Независимо от логического недостатка - это не лучший способ глобально управлять сценариями типа авторизации на вашем сайте. Если вы хотели иметь одну страницу, на которую могли бы пойти люди (например, http://www.mysite/welcome), то ваша проблема в том, что ваш маршрут слишком глобальный. Однако, если ваш код подскажет вам, что вы хотите создать проверку «всех страниц», чтобы проверить, следует ли вам войти в систему или зарегистрироваться, тогда вы должны реализовать фильтр авторизации. Пример фильтра авторизации (для немного другой цели) можно найти по адресу https://stackoverflow.com/a/30377097/1638254. Y ou хотят заполнить метод OnAuthorization с помощью подходящего кода для перенаправления пользователя (или разрешить его через

+0

Я понял, что это что-то вроде этого (я уже изменил свой подход), но хотел подтверждения. Но для будущих ссылок есть способ маршрутизации с каждой пользовательской страницы, но не от входа/регистрации? или перенаправить, но затем вернуться к действию по умолчанию? –

+0

Технически да, если бы вы могли поместить все маршруты в правильном порядке приоритета (т. Е. Ваш {* путь} будет возвращаться для многих других конкретных маршрутов). Вот сообщение о приоритетах маршрутов http://stackoverflow.com/questions/6493026/orchard-cms-routing-question. Я считаю, что вы можете использовать и отрицательные значения. Это говорит - я уверен, что в любое время, когда вы хотите делать то, о чем вы просите, что переход к другому контроллеру сначала не правильный. Вы почти наверняка ищете фильтры auth –

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