代码之家  ›  专栏  ›  技术社区  ›  mare

在ASP.NET MVC中存储指向内部内容页的链接

  •  0
  • mare  · 技术社区  · 14 年前

    我在走这样的路线

            routes.MapRoute(
                "PageBySlug",
                RouteType.Regular,
                "{slug}",
                new {controller = "Page", action = "Display", slug = "Default"}, null
                );
    

    将请求映射到~/some page slug to ~/page/display/some page slug。

    添加内容时,用户可以选择链接到现有页面以创建引用,然后我将这些链接以这种格式存储在数据存储区:“/some page slug”。

    当我在Cassini中运行应用程序并从数据存储中拉出链接并将其附加到标签上时,它看起来像这样 http://localhost:93229/Some-Page-Slug 这个链接也可以工作。

    但是,当在IIS中的某个网站下的虚拟目录中运行应用程序时,附加的链接会生成此URL http://localhost/Some-Page-Slug ,应该是什么时候 http://localhost/virtualdir/Some-Page-Slug .

    当然,这会产生404错误。

    如何解决这一问题,使其在任何情况下都能普遍发挥作用?我应该在数据库中以不同的方式存储它,还是应该在运行时将其转换为视图中的正确形式,以及如何做到这一点?

    1 回复  |  直到 14 年前
        1
  •  1
  •   mare    14 年前

    我已经找到一个解决方案:

    RouteValueDictionary routeValues = new RouteValueDictionary
                                                {
                                                    {"slug", Html.Encode(Model.Url)}
                                                };
    // the commented lines work in IIS but not is ASP.NET builtin server        
    //string url = UrlHelper.GenerateUrl("PageBySlug", "Display", "Page", routeValues, RouteTable.Routes,
    //Request.RequestContext, true);
    string url = Url.Content("~/" + Html.Encode(Model.Url)); // this works in both
    

    如果您有其他建议,欢迎!