2015-01-29 3 views
-1

Скажем, например, у меня есть ControllerA, который имеет около 10 Действия в ней, когда пользователь вводит в URL /ControllerA/{Любое имя Действие} должно перенаправлять /ControllerB/IndexПеренаправление контроллера на другой контроллер

есть простой способ перенаправить все действия в ControllerA к ControllerB в без того, чтобы написать RedirectToAction во всех действиях в ControllerA

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

@John: Спасибо. – Adi

ответ

0

вопрос не очень понятно -

Я вижу потенциально три различных сценария (возможно, больше?) 1. Вы на самом деле нужно перенаправить от всех этих действий, прежде чем делать что-либо делать (так почему они даже там?), 2. Вы хотите, чтобы они выполнили, а затем перейдите в ControllerB. 3. Вы хотите просто вызвать ControllerB непосредственно для всех этих 10 Urls?

Для сценария один вы можете просто использовать маршрутизацию атрибутов на контроллере A (или даже на контроллере B) и иметь один метод, который перенаправляет на индекс. Для сценария два вы хотите переопределить OnActionExecuted Для сценария три вы хотите поместить маршруты атрибутов непосредственно в Index со всеми путями, которые там ведутся.

Edit:

вы можете сделать что-то в маршрутизации, который будет коротким контроллер цепи А.

if (configurationCondition) 
{ 
    routes.MapRoute("Hijaack", 
     url: "controllerA/{*theRest}", 
     defaults: new { controller = "controllerB", action = "Index" }); 
} 

Это более свободно, чем требует действий, чтобы точно соответствовать тому, что находится на controllerA. Он полностью избегает перенаправления, что должно быть более приятным для конечного пользователя.

Он может быть затянут до более конкретных маршрутов с маршрутизацией атрибутов.

+0

К вашим моменту, вот что такое мой сценарий: 1) Да, на основании определенных условий, заданных в файле конфигурации, мне нужно перенаправить любой запрос, который поступает на ** ControllerA **, перенаправленный на ** ControllerB ** 2) Нет, мне не нужно их исполнять. 3) Да Я считаю, что ответ Игоря указывает мне на то, о чем я просил. Почему Вниз Голосуйте? – Adi

+0

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

+0

И я вижу вашу точку зрения о downvoting, к сожалению, слишком поздно, чтобы вернуться вверх, если только ответ не будет изменен;) –

0

Есть несколько других способов сделать это, не затрагивая ControllerA, который был бы более подходящим:

  • с помощью фильтра, в котором, когда вы видите, что пользователь запрашивает для этого контроллера вы возвращаете переадресовать ответ на 2-й контроллер

  • с помощью правила маршрутизации

Оба они могут быть реализованы, заботясь о вашем веб-конфигурации Настройки.