【问题标题】:Design and implementation for Short URLs on IIS and ASP.NET stackIIS 和 ASP.NET 堆栈上短 URL 的设计与实现
【发布时间】:2011-03-07 01:57:52
【问题描述】:

我有兴趣在网站上创建“短 URL”一段网页。但是,这不是传统意义上的“短 URL”,如 bit.ly,它将重定向到不同的目标 URL。我希望短 URL 成为最终目的地。

例如,这些 URL 之一可能是 http://foo/a/Afjbg,当您导航到它时,它会停留在 http://foo/a/Afjbg(IOW,http://foo/a/Afjbg 在地址栏中对用户可见)。

如果是静态内容,我只会将页面和文件夹排列成这些名称。但是我将在网站上拥有的内容将从数据库动态驱动,因此每个页面都是动态生成的。所以内容看起来在逻辑上不同,但实际上本质上是相同的带有动态内容的 .aspx 页面。

如何在 Microsoft 托管堆栈上实现这一点?该平台是带有 ASP.NET 4 的 IIS 7。我认为有一种方法可以轻松设置它,但是对于 MS 托管堆栈来说是新手,我不知道 :)

【问题讨论】:

    标签: asp.net iis-7 short-url


    【解决方案1】:

    使用ASP.NET MVC routing

    它允许将任何 URL 模式路由到“页面”

    例如

    routes.MapRoute(
                    "Default", // Route name
                    "a/{id*}",   // Route anything to this controller
                    new { controller = "Home", action = "Index", id = "" } // Parameter defaults
                );
    

    【讨论】:

    • 要澄清的一点是,在 foo.com/a/Afjbg 的示例 ULR 中,我需要将“a/Afjbg”部分通过(或仅可见)到端点页面知道要提供哪些动态内容。由于“/a/”和“Afjbg”可以有大量的变化,我不想为每个组合编写一个控制器。
    • 您不需要,只需将路线设置为“{id*}”即可获得所有信息。但一般来说有一些逻辑分区会更容易
    • 如果我想让“/a/”也可变呢?例如,它可以是任何东西 [A-Z, a-z, 0-9, -, ~]。
    • 将路线设置为“{id*}”,您将获得一切。然后,您必须解析整个查询字符串。如果您有固定的层次结构,但名称灵活,则可以使用类似“{level1}/{level2}/{level3}/{level4}”的名称。通常使用“{id*}”更简单
    【解决方案2】:

    它被称为URL routing,ASP.NET 从 3.5 版开始就原生支持它。这是一个来自 MSDN 的 C# 示例。波浪形括号将 URL 路径的各个块作为参数发送到 ~/categoriespage.aspx

    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }
    
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("",
            "Category/{action}/{categoryName}",
            "~/categoriespage.aspx");
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用大多数基于 .NET 的 CMSblog engine,只需将 slug 设为短字符串。

      详情:

      在大多数 CMS 和博客引擎中,该软件将 slug 与帖子标题分开。如果您不指定 slug,它将为您自动生成一个...例如,标题为“Hello world”的帖子可能会生成一个“hello_world”的生成 slug。但是您可以输入自己的 slug 为“Afjbg”。

      或者,如果您想要更复杂一点,我上面引用的两个程序都是开源的 - 这意味着您可以轻松修改 slug 生成组件以自动生成这些小字符串。

      您可以尝试使用 ASP.NET 路由,但在不了解您正在使用或构建的应用程序的情况下,这可能并不容易(例如,某些 CMS 引擎可能已经使用路由,或者使用旧式处理程序不要玩得很好)。

      【讨论】:

        猜你喜欢
        • 2014-06-23
        • 2016-08-13
        • 2013-10-10
        • 2013-01-25
        • 2010-12-05
        • 1970-01-01
        • 2011-07-04
        • 2010-11-18
        • 1970-01-01
        相关资源
        最近更新 更多