【问题标题】:url routing doesn't work for root folderurl 路由不适用于根文件夹
【发布时间】:2009-09-03 16:22:21
【问题描述】:

我在asp.net 3.5下实现了url路由,代码如下:

public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            string virtualPath = requestContext.RouteData.Values["page"].ToString();

            //if virtualpath doesn't end in aspx, then it's just a directory path loading
            //default.aspx by default.
            if (!virtualPath.EndsWith(".aspx") && !virtualPath.EndsWith(".txt"))
            {
                virtualPath += "default.aspx";
            }

            return BuildManager.CreateInstanceFromVirtualPath(
                    virtualPath, 
                    typeof(Page)) as Page;
        }

所以我可以拥有像 www.mysite.com/en/products/ 这样的网址,其中 /en/ 不是物理目录, default.aspx 位于 products/ 目录下并自动加载。

它适用于除根以外的所有内容:www.mysite.com/en/。此网址失败。 www.mysite.com 下存在一个 default.aspx,它确实适用于 www.mysite.com/en/default.aspx。但是,在访问 www.mysite.com/en 时出现错误,它不是 404。这是在进行实际路由时。当它试图从 routedata 值中检索“page”属性时,它在代码的第一行失败。它只是从找不到对象引用崩溃。我在某处读到这是根目录的 asp.net 问题。你对此有什么想法吗?

【问题讨论】:

    标签: asp.net-3.5 url-routing


    【解决方案1】:

    我通过添加另一个规则来修复它!

    这是更好的代码:

        try
        {
            string virtualPath = requestContext.RouteData.Values["page"].ToString();
    
    
            //if virtualpath doesn't end in aspx, then it's just a directory path loading
            //default.aspx by default.
            if (!virtualPath.EndsWith(".aspx") && !virtualPath.EndsWith(".txt"))
            {
                virtualPath += "default.aspx";
            }
    
            return BuildManager.CreateInstanceFromVirtualPath(
                    virtualPath,
                    typeof(Page)) as Page;
        }
        catch
        {
            //the following is in case when it's off the root /en/
            return BuildManager.CreateInstanceFromVirtualPath("~/default.aspx", typeof(Page)) as Page;
        }
    

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2018-12-13
      • 2013-12-08
      • 2021-08-09
      • 2013-09-20
      • 2019-04-08
      • 2015-01-28
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      相关资源
      最近更新 更多