在Web表单应用程序下为MVC应用程序混合MVC路由

时间:2009-11-23 03:17:33

标签: asp.net-mvc iis-7

我在托管服务器的根目录下安装了一个BlogEngine.net实例。我想玩ASP.Net MVC编写一个小应用程序并将该应用程序安装在根目录下的文件夹下。

我能够看到http://example.com/testApp/,但是像http://example.com/testApp/edit这样的路由页面正在给出404。

我已经四处寻找,我只是不清楚需要什么才能使路由正确。我是否需要在BlogEngine的web.config中设置一些内容,还是需要在我的应用程序设置中执行某些操作?

主机是WinHost.com,它是IIS7

修改/更新

所以我理解http://example.com/testApp得到了服务,因为该目录下有一个default.aspx,并且路由页面没有得到服务,因为它们没有物理aspx。当我在Visual Studio下启动时,/ edit会被路由到编辑视图。

我猜测BlogEngine.net的global.asax正试图将这些页面映射到BlogEngine世界,而不是将它们路由到我的testApp。

如果是这种情况,那么我的问题是如何让BlogEngine将请求转发给我的testApp?我希望我在web.config中遗漏了一些简单的东西,因为如果我必须向BlogEngine的global.asax添加内容以进行路由,那么我不需要重建BlogEngine吗?

2 个答案:

答案 0 :(得分:2)

根据我在MVC tutorial中找到的信息,我发现了为什么我的路由无效。

我在托管服务器上的请求处理模式配置为使用Classic .NET AppPool非集成模式。要使其在经典模式下工作,您需要修改路由表以使用文件扩展名或创建通配符脚本映射。

我能够使用集成模式保持BlogEngine正常工作,因此我需要解决此问题的所有方法就是更改模式。

希望这有助于某人...

答案 1 :(得分:1)

您的testApp控制器应用程序中是否存在Edit.aspx文件?默认路由的工作方式是:

routes.MapRoute(
"Default",                   // Route name
"{controller}/{action}/{id}",    // URL with parameters
new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
 );

因此,默认情况下,当您访问Home / Index时,ASP.NET MVC会查找Index.aspx

在你的情况下,你的路由包括(我刚刚完成了这个):

routes.MapRoute(
"CustomRoute",                   // Route name
"{controller}/{action}/{id}",    // URL with parameters, id is optional.
new { controller = "testApp", action = "Edit", id = "" }  // Parameter defaults
 );

您尝试使用Edit.aspx的地方

您的Global.asax文件内部存在所有自定义路由,您是否触摸过该文件?我听说过的经验法则是你想在默认值之前先编写所有自定义路由。

编辑:

我也偶然发现了这一点,可能会有所帮助

  

配置文件中有四个与路由相关的部分:system.web.httpModules部分,system.web.httpHandlers部分,system.webserver.modules部分和system.webserver.handlers部分。请注意不要删除这些部分,因为如果没有这些部分,路由将不再有效。

取自here

祝你好运,希望这会有所帮助。