ASP.NET 3.5路由不处理/(根URL)

时间:2009-05-08 11:04:05

标签: asp.net routing

我正在使用ASP.NET 3.5中的新路由功能充当我对网站页面请求的全部功能。我在global.asax,

中注册了我的路线如下
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>
<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {

        RegisterRoutes(RouteTable.Routes);

    }

    private void RegisterRoutes(RouteCollection Routes)
    {

        Route r = new Route("{*URL}", new MyRouteHandler());
        Routes.Add(r);

    }

</script>

除了/(根页面)之外,所有URL的代码都可以正常工作。如果我去任何其他URL / blah / something / foo /它工作正常,我的处理程序按预期运行。

如何让它在根页面上运行?我通过Visual Studio 2008的Web服务器构建运行代码。

2 个答案:

答案 0 :(得分:1)

Cassini(Visual Studio的内置网络服务器)可能存在路由问题。

引用Dmitryr's blog

  

由于目录列表功能,Cassini在使用路由的ASP.NET项目中遇到了问题。 Cassini会使用目录列表响应任何目录请求,而不会将请求移交给ASP.NET。因此,对友好URL的请求将被Cassini截获,并且永远不会到达ASP.NET。

     

此更新(v3.5.0.1)更改了逻辑 - 所有请求首先转到ASP.NET,然后Cassini拦截404响应,如果请求是针对目录,则它会响应目录列表。依赖友好URL /路由的应用程序现在可以更好地使用Cassini。

你没有提到你去根时看到的行为。如果您没有获得目录列表,可能需要删除默认页面?

答案 1 :(得分:0)

我不确定您是否可以使用web.routing定位根目录。

我在这里做了一个很重要的假设,即您已经在Web表单应用程序上实现了web.routing。如果是这种情况,您仍然会将您的根请求捕获到默认页面(即Default.aspx),在这种情况下,您可以从那里处理请求。

我过去的web.routing实现针对根目录中的ASPX页面,我也将其设置为默认页面。如果请求在没有任何路由信息的情况下访问该页面,我认为该请求是针对家庭的。

但是,如果您使用的是Web表单引擎,但使用的是MVC样式的文件夹结构。我建议添加适当重定向的默认页面,或者可能在BeginRequest事件中捕获请求。