Расширенный сценарий маршрутизации ASP.NET MVC - PullRequest
0 голосов
/ 23 июля 2010

У меня есть приложение ASP.NET MVC со следующими требованиями к развертыванию:

Структура URL должна быть примерно такой:

http://server/app/[enterprise]/[communinty]/{controller}/{action}/...

То, что я хочу сделать, это перехватить URL-адрес до того, как обработчик маршрута MVC получит его, удалить части [enterprise] / [community] и затем позволить MVC продолжить обработку, как если бы исходный текст URL не содержал эти два сегмента.

И вот почему:

Приложение предоставляет несколько порталов нескольким клиентам (предприятиям), и каждое сообщество в пределах предприятия имеет свою собственную совокупность пользователей. Схему такого типа можно также обслуживать путем физического развертывания одного экземпляра приложения (binaries, content, web.config) в каждом каталоге [community], но по соображениям логистики и производительности я не думаю, что мы хотим идти по этому пути. Поэтому я пытаюсь виртуализировать его с помощью трюков с маршрутизацией.

Буду признателен за любые предложения по поводу этой схемы или альтернативные решения.

Мы находимся на IIS 7, если это что-то меняет.

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Вы можете использовать следующий маршрут до маршрута по умолчанию

routes.MapRoute(
    null,
    "{enterprise}/{community}/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Затем вы можете игнорировать параметры {enterprise} и {community} в ваших методах действий.

0 голосов
/ 24 июля 2010

Вот возможное решение с модулем IIS Rewrite. Возможно, это не лучший подход, но он может работать. Есть ли более простой / лучший вариант в маршрутизации MVC? Точно сказать не могу. Только начал заниматься этим сам.

Используя "http://server.com/app/enterprise/community/controller/action/" в качестве примера.

Что происходит:

  1. Удаляет строку из URL. новый URL: http://server.com/controller/action/
  2. Перенаправляет пользователя на новый URL. пользователя браузер теперь показывает: http://server.com/controller/action/
  3. Берет новый URL и пытается восстановить его, чтобы захватить правильный содержание. Браузер пользователя показывает: http://server.com/controller/action/; IIS возвращает: http://server.com/app/enterprise/community/controller/action/

Все это будет в файле web.config после установки модуля перезаписи IIS:

<rewrite>
    <rules>
        <clear />

        <rule name="Redirect to remove Offending String" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
            <match url="server.com/app/enterprise/community*" />
            <action type="Redirect" url="/{R:1}" />
            <conditions logicalGrouping="MatchAll">
                <add input="{SERVER_NAME}" pattern="*server.com*" />
            </conditions>
        </rule>

        <rule name="Rewrite to get Original Content" enabled="true" patternSyntax="Wildcard" stopProcessing="false">
            <match url="*" />
            <conditions logicalGrouping="MatchAll">
                <add input="{SERVER_NAME}" pattern="*server.com*" />
            </conditions>
            <action type="Rewrite" url="app/enterprise/community{R:1}" />
        </rule>

    </rules>
</rewrite>

Примечание: просто сделал это быстро, не проверял.

...