Запуск MVC с существующим сайтом Webforms - PullRequest
4 голосов
/ 25 октября 2011

Я прочитал большинство, если не все статьи о добавлении MVC 3 к существующим сайтам веб-форм. Я внес изменения в глобальный asax сайта webforms для поддержки MVC, а также изменения в web.config. Однако есть еще некоторые проблемы.

  1. MVC 3 является жадным - по умолчанию он берет корень сайта, так что для перехода к корню я перехожу на страницу ввода для mvc, а не на страницу веб-форм, которая мне нужна. Чтобы быть понятным при переходе к корню, я хочу, чтобы он зашел на mysite.com/default.aspx. Чтобы исправить корень сайта я добавляю

    rout.MapPageRoute («SiteRoot», «», «~ / Default.aspx») Однако это затем разбивает URL-адреса MVC так, что я получаю запутанные URL-адреса, такие как

    http://localhost:86/default?action=Index&controller=Blog Как я могу это исправить, чтобы корень сайта перешел в webforms default.aspx, и все равно мои URL MVC были правильными?

  2. MVC 3 разбивает пару HttpHandlers, которые использует веб-форма. В частности, я использую обработчик для добавления заголовков с истекшим сроком давности к изображениям и обработчик ресурсов для объединения таблиц стилей и файлов JavaScript. Само присутствие любого маршрута в RegisterRoutes ломает эти обработчики, так что таблицы стилей не загружаются через обработчик ресурсов, и я теряю, что далекое будущее истекает, и есть модуль httpcompression, который тоже перестает работать. Итак, как мне поддерживать httphandlers и модули для веб-форм, сохраняя при этом маршруты для части сайта MVC 3?

Эти 2 проблемы я не видел ни у кого в различных постах блога, касающихся микширования MVC3 и веб-форм.

О, и у меня есть rout.IgnoreRoute ("{resource} .aspx / {* pathInfo}") в global.asax. Обработчик ресурсов использует расширение файла aspx, поэтому я думаю, что тогда это исключение в глобальном масштабе это будет работать, но я думаю, что нет.

Другой вариант, который я знаю, - это создать папку на сайте wbeforms и запустить ее в качестве собственной отправной точки приложения - однако в итоге я получаю URL, который мне действительно не нужен, например site.com/blog/blog/index, где 1-й блог - это папка, работающая как точка приложения, а второй - контроллер.

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Лучшее решение, которое я могу найти, - это , а не , смешать MVC 3 с существующим сайтом веб-форм.Вместо этого установите каталог MVC в качестве собственной отправной точки приложения, а затем запустите MVC из этой папки, чтобы он и существующее приложение веб-форм полностью не знали друг друга.Таким образом, обработчик ресурсов, httpmodules и другие обработчики все еще работают для сайта webforms.И таким образом корень домена переходит к webforms default.aspx, а не MVC по умолчанию.Также мне не нужно помещать эту запись в global.asax, который, в свою очередь, испортил 3 URL-адреса mvc.Следующая проблема заключалась в том, чтобы разобраться с URL, чтобы у меня не было URL / blog / blog / post / 1.Чтобы исправить это, я изменил ссылку html-действия на

@Html.ActionLink(item.PostTitle, "Post", New With {.id = item.PostId}, Nothing)

, а затем внес изменения в global.asax - измените маршрут по умолчанию на (просто удалите {controller}:

routes.MapRoute( _
        "Default", _
        "{action}/{id}", _
        New With {.controller = "Blog", .action = "Index", .id = UrlParameter.Optional}, New String() {"RiderDesignMvcBlog.Core.Controllers"})

Так что теперь вместо блога / блога / индекса или блога / блога / поста / 1 я получаю правильный чистый URL без дубликата блога в URL - блог / пост / 1

0 голосов
/ 25 октября 2011

Я предлагаю вам изменить расширение вашего обработчика как настоящий обработчик, .ASHX, и вместо этого игнорировать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...