我正在使用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服务器构建运行代码。
答案 0 :(得分:1)
Cassini(Visual Studio的内置网络服务器)可能存在路由问题。
由于目录列表功能,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事件中捕获请求。
富