在Route中使用.mvc.aspx时找不到MVC应用程序的默认页面

时间:2010-11-08 15:29:21

标签: c# .net asp.net asp.net-mvc vb.net

我正在尝试将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,但这似乎无法解决问题。

2 个答案:

答案 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中工作,则不需要此页面。