我正在尝试将ASP.NET MVC与旧版本的IIS一起使用,这些版本的MVC默认路由有问题。我找到了一条建议,要求.mvc.aspx
添加到我的路线中。所以不要这样:
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index",
.id = UrlParameter.Optional} _
)
我现在用这个:
routes.MapRoute( _
"Default", _
"{controller}.mvc.aspx/{action}/{id}", _
New With {.controller = "Home", .action = "Index",
)
这有助于让MVC在旧版本的IIS上运行。但是,当我导航到http://win2k3machine/MyMVCApplication/
时,我收到“目录列表被拒绝”消息。类似地,当我使用Casini(Visual Studio的开发Web服务器)并导航到http://localhost:2019
时,我在'/'应用程序中得到“服务器错误”。消息。
在IIS和/或我的MVC应用程序中需要更改什么才能使默认页面正常工作?
注意:我尝试按this answer添加RouteTable.Routes.RouteExistingFiles = True
,但这似乎无法解决问题。
答案 0 :(得分:1)
您需要在IIS中添加通配符映射。有关更多详细信息,请参阅此文章:
http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx
答案 1 :(得分:1)
我很难在Safari 6中使用通配符映射。但是,使用以下代码添加Default.aspx页面可以解决问题:
VB.NET:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
HttpContext.Current.RewritePath(Request.ApplicationPath, False)
Dim httpHandler As IHttpHandler = New MvcHttpHandler()
httpHandler.ProcessRequest(HttpContext.Current)
End Sub
C#:
public void Page_Load(object sender, System.EventArgs e)
{
HttpContext.Current.RewritePath(Request.ApplicationPath, false);
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
}
旧版本的IIS希望看到Default.aspx页面,因此该页面会重写路径以正常工作。如果您使用通配符映射在IIS中工作,则不需要此页面。