C# 如何获得原始谷歌缩短后的网址';已经解决了

C# 如何获得原始谷歌缩短后的网址';已经解决了,c#,C#,因此,我有一个google缩短的Url,一旦我点击它并点击我的控制器,我希望能够在解析之前看到原来的goo.gl Url是什么。我到底该怎么做 我尝试了Request.urlreferer.AboluteUri和System.Web.HttpContext.Current.Request.Url.AbsoluteUri,但两者似乎都不起作用。它们都只返回解析的绝对uri。在此方面的任何帮助都将不胜感激 以下是缩短URL的示例- 然后,用户(至少在测试中)将访问localhost:81/colle

因此,我有一个google缩短的Url,一旦我点击它并点击我的控制器,我希望能够在解析之前看到原来的goo.gl Url是什么。我到底该怎么做

我尝试了
Request.urlreferer.AboluteUri
System.Web.HttpContext.Current.Request.Url.AbsoluteUri
,但两者似乎都不起作用。它们都只返回解析的绝对uri。在此方面的任何帮助都将不胜感激

以下是缩短URL的示例-

然后,用户(至少在测试中)将访问localhost:81/college/events/details/23


因此,基本上,当我点击Details控制器时,如何恢复原始的缩短url?

好的,这感觉更像是一种解决方法,但是

我看不到任何方法可以从goog.gl服务中解析缩短的url。但是,您可以向goog.gl发送一个web请求,该请求只使用
HEAD
HTTP动词,并使用缩短的url

然后,在对
请求的响应中,
位置
头将是原始url(因为它将发回重定向请求301)

您可以使用查看响应。在发布之前,输入缩短的url,然后选择
标题
动词。

您使用以下url执行get请求,并获得一个带有长url的Json


任何正常配置的浏览器都会发送标题HTTP\u REFERER

一个简单的
请求.urlReferer
不起作用吗?或者类似于
HttpContext.Current.Request.ServerVariables[“HTTP\u REFERER”]
ServerVariables[“HTTP\u REFERER”]

这取决于编码的位置,但关键是从请求中获取头


HTTP_REFERER应始终包含上一个(REFERER)url。我不明白你为什么在那里得到解析的url,除非它是第二个重定向(例如,你的缩写指向
http://server.com
并且您的web服务器配置为将丢失的
www
重定向到
http://www.server.com


Francisco

你能提供一个缩短的原始url的例子吗?你点击的链接呢?我现在已经添加了一些例子。是的,这看起来是最好的方式。的确。Google向客户端回复HTTP 301,因此对检索到的长URL发出新请求。问题是,当我到达控制器时,我不知道缩短的URL是什么。控制器只知道解析的长URL。我的问题是,我如何知道长url是直接访问的,还是通过短版本访问的?@KennySteen我想你不会知道的。goog.gl将用301回复您的客户,然后从您的客户那里,请求将始终看起来像更长的url。@DavidTryon这是我不确定的。如果这是不可能的,那么我会找到一些其他的方法来区分不同的URL。我只是想知道这是不是一个可行的选择。谢谢anyway@KennySteen你想从缩短的url中提取分析信息吗?只是好奇。你的建议会返回解析后的URL。它不会返回我一直在寻找的原始缩短URL。正如我在问题中提到的,我尝试了
Request.urlreferer
,但没有结束。HTTP\u REFERER应该始终包含前面的(REFERER)url。我不明白你为什么在那里得到解析的url,除非它是第二个重定向(例如,你的缩写指向
http://server.com
并且您的web服务器已配置为将其重定向到
http://www.server.com
)。我刚刚在答案中添加了我以前的评论。我认为你不应该看一本书,而应该看看它的原因。检查我所说的关于自动服务器内部重定向的内容。