我读过有关将MVC 3添加到现有webforms网站的各种文章。我已经对webforms站点的全局asax进行了更改,以支持MVC以及对web.config的更改。但是仍然存在一些问题。
MVC 3是贪婪的 - 默认情况下,它接管网站的根目录,以便导航到根目录,我转到mvc的入口页面,而不是我想要的webforms页面。要在导航到root时要清楚,我希望它转到mysite.com/default.aspx。要修复网站根目录,我添加
routes.MapPageRoute(“SiteRoot”,“”,“〜/ Default.aspx”) 然而,这会打破MVC网址,这样我最终会搞乱像
这样的网址http://localhost:86/default?action=Index&controller=Blog 我如何修复它,以便站点根目录转到webforms default.aspx并仍然让我的MVC网址正确?
MVC 3打破了webform使用的HttpHandler。具体来说,我使用处理程序将远期未来的expires头添加到图像中,并使用资源处理程序来组合样式表和javascript文件。 RegisterRoutes中任何路由的存在都会破坏这些处理程序,以便样式表不会通过资源处理程序加载,并且我将失去远期的未来,并且还有一个httpcompression模块也会停止工作。那么如何在保留网站MVC 3部分路由的同时,为webforms维护我的httphandlers和模块呢?
这两个问题我没有看到有人在关于混合MVC3和webforms的各篇博客文章中提到过。
哦,我在global.asax中有 routes.IgnoreRoute(“{resource} .aspx / {* pathInfo}”)。资源处理程序使用aspx文件扩展名,所以我会想到这个在全球范围内排除hanlder会起作用,但我猜不是。
我知道的另一个选项是在wbeforms网站内设置一个文件夹并将其作为自己的应用程序起点运行 - 但是我最终得到了一个我真的不想要的网址,例如site.com/blog/blog/index第一个博客是作为自己的应用程序点运行的文件夹,第二个博客是控制器。
答案 0 :(得分:1)
我能找到的最佳解决方案是不将MVC 3与现有的webforms网站混合使用。而是将MVC目录设置为自己的应用程序起点,然后从该文件夹运行MVC,以便它和现有的webforms应用程序完全不知道彼此。以这种方式,资源处理程序和httpmodules以及其他处理程序仍然适用于webforms站点。通过这种方式,域根默认为webforms default.aspx而不是MVC。此外,我不必将该条目放入global.asax,这反过来搞砸了mvc 3网址。下一个问题是处理网址,以便我没有url lke 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我得到一个正确的干净网址没有网址中的重复博客 - 博客/帖子/ 1
答案 1 :(得分:0)
我建议您将处理程序的扩展名更改为真正的处理程序.ASHX
,然后忽略它们。