我在运行IIS 6的Windows Server 2003计算机上部署了一个ASP.NET MVC2网站。 我在标准MVC项目中几乎使用了默认路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Products", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
}
导航到http://localhost/MyApplication会将我带到列表页面。导航到http://localhost/MyApplication/Products/Details/21给了我一个404.这个路由在VS2010的内置开发服务器上运行良好。
我已经在所有地方提到了标准的IIS通配符aspnet_isapi.dll映射 - 导航到List页面之前没有工作 - 但导航到默认路由以外的任何其他内容都被破坏了。
我真的想保留无扩展名的网址。有没有人知道为什么路由适用于默认网页,但没有其他人?
*编辑:刚尝试添加.aspx扩展名,即现在我的路线如下:
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Downtime", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
它有相同的行为,除了这次我得到的是asp 404页面而不是html 404页面...
*编辑2:使用以下路线再次尝试并确保.mvc已映射到aspnet_isapi.dll:
routes.MapRoute(
"Default", // Route name
"{controller}.mvc/{action}/{id}", // URL with parameters
new { controller = "Downtime", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
这次我得到了'Internet Explorer无法显示网页'404风格的页面。我现在使用这3种不同的方法有3种不同的404错误...
*编辑3返回编辑:我在Windows XP专业版的IIS 5.1中运行该站点,虚拟目录上只有通配符重映射,但天堂禁止我可以在网络服务器上运行...
答案 0 :(得分:1)
首先,您应该遵循以下步骤:http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx
(只是为了确保你没有错过任何东西)。这显示了如何使无扩展和扩展版本工作。您可能希望至少检查扩展名版本是否有效以检查其他内容是否未配置错误。
在那之后,也许你应该尝试添加这样的东西..
http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx
...因为它确实有助于确定您的路线被破坏的位置。
要检查的其他一些事项:
IIS是否配置了ASP.NET?检查虚拟目录的属性。在VDir上选择配置按钮,并检查通常的ASP.NET扩展是否映射到.NET 2.0 ISAPI dll。这将是
的内容C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \ ASPNET_ISAPI.DLL
在IIS上启用了ASP.NET 2(在IIS 6下默认关闭):在IIS管理器中,检查Web Service Extensions文件夹以启用它。
您是否部署了global.asax?
答案 1 :(得分:0)
找到它 - 路由实际上正在工作,我的网址不是。我使用javascript来构建一些URL,结果发现我没有链接到
http:// localhost / MyApplication / Controller / Action / ID
我实际上正在链接到
http:// localhost / Controller / Action / ID
构建这样的链接正在开发服务器上运行,但是一旦将站点部署到Web服务器上的虚拟目录,这些地址就不正确了,因为URL中有额外的应用程序名称。
总之,要小心你的网址 - 不要像我一样用字符串构建它们。