C# 如何缩短URL

C# 如何缩短URL,c#,asp.net,C#,Asp.net,我有一个类似的URL: www.zzz.com/ExternalDocuments/ExternalDocumentUpload.aspx?hjgbasdjfjsggfsdf 我想提供ExternalDocuments/ExternalDocumentUpload.aspx的缩写。我不想缩短整个url。听起来你想要的不是“缩短”--例如,bit.ly之类的服务用于缩短整个url,以便在Twitter或类似网站中使用--而是“url重写” 这将采用用户提供的“友好”路径(位于“/”的右侧),并将

我有一个类似的URL:

www.zzz.com/ExternalDocuments/ExternalDocumentUpload.aspx?hjgbasdjfjsggfsdf

我想提供
ExternalDocuments/ExternalDocumentUpload.aspx
的缩写。我不想缩短整个url。

听起来你想要的不是“缩短”--例如,
bit.ly
之类的服务用于缩短整个url,以便在Twitter或类似网站中使用--而是“url重写”

这将采用用户提供的“友好”路径(位于“/”的右侧),并将其转换为ASP.NET查找页面所需的URL

有几种不同的方法可以实现这一点,具体取决于您使用的ASP.NET和IIS的风格。ScottGu在这里有一个很好的总结:

对于IIS7,我使用了这里的一个:


听起来,你想要的不是“缩短”——例如,
bit.ly
之类的服务用于缩短整个URL,以便在Twitter或类似网站中使用——而是“URL重写”

这将采用用户提供的“友好”路径(位于“/”的右侧),并将其转换为ASP.NET查找页面所需的URL

有几种不同的方法可以实现这一点,具体取决于您使用的ASP.NET和IIS的风格。ScottGu在这里有一个很好的总结:

对于IIS7,我使用了这里的一个:


您可以在global.asax文件中,在应用程序启动请求事件时设置url重写,该重写将在每个请求上运行,检查请求的url,并在需要时将其重定向到所需的url。您可以这样进行检查:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    if (Request.RawUrl== "/someShorturl/page.aspx")
    {
        HttpContext.Current.RewritePath("/ExternalDocuments/ExternalDocumentUpload.aspx?hjgbasdjfjsggfsdf");
    }
}
所以,如果用户转到“www.zzz.com/someShorturl/page.aspx”,他将得到“www.zzz.com/ExternalDocuments/ExternalDocumentUpload.aspx?hjgbasdjfjsggfsdf”页面,尽管浏览器中的url不会改变

如果要将缩短的url更改为长的原始url,可以调用Response.Redirect,而不是RewritePath方法


此示例针对一个特定的url,但您当然可以创建更复杂的逻辑。

您可以在global.asax文件中设置url重写,在应用程序启动请求事件时,该事件将在每个请求上运行,检查请求的url,并在需要时将其重定向到所需的url。您可以这样进行检查:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    if (Request.RawUrl== "/someShorturl/page.aspx")
    {
        HttpContext.Current.RewritePath("/ExternalDocuments/ExternalDocumentUpload.aspx?hjgbasdjfjsggfsdf");
    }
}
所以,如果用户转到“www.zzz.com/someShorturl/page.aspx”,他将得到“www.zzz.com/ExternalDocuments/ExternalDocumentUpload.aspx?hjgbasdjfjsggfsdf”页面,尽管浏览器中的url不会改变

如果要将缩短的url更改为长的原始url,可以调用Response.Redirect,而不是RewritePath方法


此示例针对一个特定的url,但您当然可以创建更复杂的逻辑。

您尝试了什么?它是如何不像您期望的那样工作的?缩短URL或URL的一部分并在原始URL部分附加一些不同的字符串来代替长URL并不困难,但您的web服务器应该知道此URL需要重定向到原始URL。你先想到了吗?这里有许多算法可以应用。最简单的方法是从这个迷你URL中随机抽取5个字符,然后将其变成一个新的1。但这对u来说不是一个长期存在的算法。实际上,已经有一个url用于所有页面,但这个url是独立的,用户不需要登录。我有那个代码,但不明白我应该去哪里找到它。可能是母版页或默认登录页?您可以使用不同的文件名。您没有解释您想要完成的全部内容(重定向?仅作为新URL在外部可见,没有重定向?),或者您想要在什么上下文中完成它(用户键入它?粘贴在博客上?)。你有一些严重的歧义(你想去掉查询字符串吗?),你没有解释你是想把它放在一个URL上,还是放在你网站的每个页面上。投票结束,因为问题含糊不清,除非提供了更多详细信息。此外,如果代码使用了查询字符串,则没有明确的方法将其从URL中删除,您也不应该尝试。它已经处于一个好位置,将它移动到HTTP请求中的其他位置可能会使代码复杂化,对任何人都没有好处?它是如何不像您期望的那样工作的?缩短URL或URL的一部分并在原始URL部分附加一些不同的字符串来代替长URL并不困难,但您的web服务器应该知道此URL需要重定向到原始URL。你先想到了吗?这里有许多算法可以应用。最简单的方法是从这个迷你URL中随机抽取5个字符,然后将其变成一个新的1。但这对u来说不是一个长期存在的算法。实际上,已经有一个url用于所有页面,但这个url是独立的,用户不需要登录。我有那个代码,但不明白我应该去哪里找到它。可能是母版页或默认登录页?您可以使用不同的文件名。您没有解释您想要完成的全部内容(重定向?仅作为新URL在外部可见,没有重定向?),或者您想要在什么上下文中完成它(用户键入它?粘贴在博客上?)。你有一些严重的歧义(你想去掉查询字符串吗?),你没有解释你是想把它放在一个URL上,还是放在你网站的每个页面上。投票结束,因为问题含糊不清,除非提供了更多详细信息。此外,如果代码使用了查询字符串,则没有明确的方法将其从URL中删除,您也不应该尝试。它已经处于一个好的位置,将它移动到HTTP请求中的其他位置可能会使代码复杂化,对任何人都没有好处。