我在托管服务器的根目录下安装了一个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吗?
答案 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
祝你好运,希望这会有所帮助。