Перезапись URL-адресов из веб-приложения ASP.NET в веб-приложение ASP.NET MVC - PullRequest
0 голосов
/ 17 июня 2010

У меня есть приложение ASP.NET Web Forms в процессе миграции на ASP.NET MVC 1. URL-адреса следующие:

hxxp: //domain/Default.aspx (WebForms)

hxxp: // домен / mvc / Controller / Action (MVC)

(hxxp, потому что stackoverflow считает, что они являются ссылками и мешает мне публиковать так много)

"mvc" - еще одно приложение на моем веб-сайте в IIS7.

Теперь мне нужно сделать это:

hxxp: // domain / имя_сайта / Default.aspx (веб-формы) hxxp: // домен / имя_сайта / mvc / Controller / Action (MVC)

Где ' subsiteName ' может быть любым и должно быть проверено во время выполнения.Я не могу создать каталоги для каждого subsiteName .

Я думал о UrlRewriting, поэтому / subsiteName / * перезаписывает в / *, но тогда мне придетсяпереписать из WebForms в MVC.

Я не могу представить, как приложение MVC в этом сценарии могло бы когда-либо принять запрос к hxxp: // domain / subsiteName / mvc / .

Есть идеи?

1 Ответ

0 голосов
/ 18 июня 2010

Вот как вы могли бы написать следующее в Managed Fusion URL Rewriter , который использует синтаксис Apache mod_rewrite:

Теперь мне нужно сделать это: hxxp: //domain/subsiteName/Default.aspx (WebForms) hxxp: // домен / subsiteName / MVC / Controller / Action (MVC)

RewriteRule /(.*)/Default.aspx   /$1/mvc/Controller/Action

Однако я предполагаю, что у вас еще не все ваши каталоги установлены таким образом, поэтому вам нужен какой-то способ сообщить MVC, что subsiteName является параметром или вашими методами. Итак, что бы вы сделали на своих маршрутах, это:

routes.MapRoute(
    "Default",
    "/{siteName}/mvc/{controller}/{action}",
    new { controller = "Home, action = Index }
);

Это займет путь перезаписи и объединит его со стандартом HomeController. Тогда, скажем, для действия Index у вас будет что-то вроде этого:

public ActionResult Index (string siteName) { ... }

А потом просто обработайте siteName особым образом. Очевидно, это слишком упрощенный пример того, как вы можете справиться с этим, но если вы хотите, вы можете также обработать это с помощью специального механизма просмотра, который перенаправляет на разные шаблоны в зависимости от имени сайта. Или вы можете извлечь siteName из переменной routs, если вы не хотите, чтобы это было в каждом методе.

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

...