【问题标题】:ASP.NET 3.5 Routing Not Handling / (Root URL)ASP.NET 3.5 路由未处理/(根 URL)
【发布时间】:2009-05-08 11:04:04
【问题描述】:

我正在使用 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 服务器运行代码。

【问题讨论】:

  • 我最终找到的最佳解决方案是创建一个空白的 aspx 文件。然后这个 aspx 文件被调用到上面描述的 MyRoutHandler 对象上使用的相同方法中,传入一个硬编码的 URL “/”。

标签: asp.net routing


【解决方案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 配合使用。

您没有提到当您转到根目录时会看到什么行为。如果您没有获得目录列表,也许您需要删除默认页面?

【讨论】:

  • 我看了一下这个,但似乎找不到应用程序的编译版本或编译后实际安装位​​置的说明。我找到了我在上面发布的解决方案。
【解决方案2】:

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

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

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

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

丰富

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 2011-07-15
    • 2011-04-11
    • 2019-10-21
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多