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