Подстановочные знаки с ASP.NET MVC MapPageRoute для поддержки организации устаревшего кода - PullRequest
4 голосов
/ 28 июля 2010

Я работаю над переносом существующего веб-сайта ASP.NET в проект MVC. Есть несколько (более 60) страниц, которые я пока не хочу переписывать, и поэтому мне интересно, есть ли способ, которым я могу:

  • Переместите существующие страницы .aspx (как файлы разметки, так и файлы с выделенным кодом) в папку «Legacy» в моей структуре MVC
  • Настройте маршрутизацию так, чтобы вызов /foo.aspx (без 'legacy') фактически вызывал ~ / Legacy / foo.aspx

По сути, я не хочу, чтобы «устаревшие» в URL-адресе, но я также не хочу, чтобы решение MVC было полно устаревших .aspx страниц. Я согласен, что это очень незначительный момент, мне просто любопытно, можно ли это сделать с помощью маршрутизации.

Я понимаю, что могу сделать:

routes.MapPageRoute("legacy-foo", "Foo.aspx", "~/Legacy/Foo.aspx"); 

но мне интересно, есть ли способ сделать это динамически (используя маршруты MVC)? например:

routes.MapPageRoute("legacyroutes", "{filename}.aspx", "~/Legacy/{filename}.aspx"); 

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

Ответы [ 2 ]

1 голос
/ 26 июня 2011

Я решил это с помощью контроллера, который возвращает содержимое файла. Это не идеальное и быстрое решение, но оно работает.

routes.MapRoute(
    "legacyroutes",
    "{filename}.aspx",
    new { controller = "Home", action = "RedirectFile"}
); 

И контроллер:

public class HomeController : Controller
{
    public ActionResult RedirectFile(string filename)
    {
        string url = Url.Content("~/Legacy/"+filename+".aspx");
        Redirect(url); // or other code to process the file
    }
}

Подробности и другие примеры здесь: http://maxivak.com/dynamic-url-rewriting-on-asp-net-mvc/

1 голос
/ 21 февраля 2011

Не уверен, что вам все еще нужно это, но вы можете решить это с помощью грязного решения:

Используйте HttpContext.Current.Request.MapPath(""), чтобы получить физическое местоположение маршрута, а затем переберите все файлы aspx (и все, что угодноиначе вы хотите отобразить) используя классы DirectoryInfo/FileInfo.Затем вы можете динамически регистрировать альтернативные пути для ваших файлов.

Я сделал прототип, и он, кажется, работает, хотя, конечно, дьявол всегда в деталях.

Приветствия,

...