【问题标题】:ASP.NET Routing - GetRouteData does not work if path existsASP.NET 路由 - 如果路径存在,GetRouteData 不起作用
【发布时间】:2011-05-01 23:47:50
【问题描述】:

我有一个HttpModule,它拦截所有请求并根据路由规则从数据库加载数据。但是,我一直遇到一个问题; GetRouteData 仅在路径不存在时有效:

var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current));

假设对 url http://localhost/contact 有一个请求,如果文件系统中不存在该路径,我将获得与该 url 相关的正确路由数据。当我想通过在路径~/contact/default.aspx 中创建一个 aspx 页面来自定义该 url 处的页面时,就会出现问题。一旦我这样做了,GetRouteData 返回null

我什至尝试创建一个新的HttpContext 对象,但如果页面存在,我仍然无法检索路由数据。

有人遇到过这个问题吗?有解决方案/解决方法吗?

我们将不胜感激所有帮助。

【问题讨论】:

    标签: asp.net webforms asp.net-routing


    【解决方案1】:

    RouteCollection.RouteExistingFiles 设置为真。

    public static void RegisterRoutes(RouteCollection routes)
    {
        // Cause paths to be routed even if they exists physically
        routes.RouteExistingFiles = true;
    
        // Map routes
        routes.MapPageRoute("...", "...", "...");
    }
    

    不过要小心。 IIS7 的行为与在 Visual Studio 中调试时使用的服务器略有不同。当我将我的应用程序部署到网络时,我对此有所了解。看看这个feedback I submitted to Microsoft Connection

    【讨论】:

    • 嗯,确实很有帮助!这当然解决了我的问题,但不幸的是产生了一个新问题。当我这样做时,我所有的 css、js 和图像文件都会通过我的路由规则进行路由,这并不是我真正想要的。我仍然希望现有文件使用原始处理程序,除了我只想获取路由值。这可能吗?
    • 该问题不是由路由现有文件造成的。这是一个由 URL 路由引起的单独问题。对不起,我不确定你的意思是你只想获取路由值。
    • 举个例子,我有一个“联系我们”页面,我希望它显示数据库中的内容以及提交联系信息的表单。如果“联系我们”页面不存在,我可以致电:var pageName = RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current)).Values["name"]; 并从数据库中检索与该页面相关的数据。但是,当页面存在时,我不能这样做,因为GetRouteData 返回 null。有意义吗?
    • 我想通了...必须添加路线约束。
    • 很好,因为我在理解你在做什么或为什么做这件事上还是有点困难。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多