ASP.NET 3.5,IIS7
在我的Global.asax的Application_BeginRequest中,我需要从请求的URL中提取一个完全单独的URL,该URL已嵌入其中,而不使用查询字符串。
我想出的解决方案是对整个目标URL进行十六进制编码,就像它是一个目录一样,如下所示:
http://localhost/687474703A...etc...732E6D7033/irrelevantFilename.txt
对于ASP.NET implementation won't tolerate a URL path greater than 260 characters。
的IIS7,此操作失败我的代码控制请求网址的生成方式,以及它如何在其中嵌入目标网址,但它无法控制目标网址值(它们是第三方网址)。
我可以更好地将此目标网址嵌入我的请求网址中吗?
答案 0 :(得分:2)
您可以对其进行URL编码,或者对其进行base-64编码。两者通常比十六进制编码更紧凑。
注意:如果网址超过大约200个字符,则无论如何,该260个字符的限制都将成为问题。如果URL超过260个字符......那么,你可以做数学: - )
我不太明白为什么你之后甚至需要一个单独的文件。您可以使用404处理程序,或者只是向前解析每个请求。
顺便说一句:如果你有选择权,你可能最好使用cookie嵌入URL,或者作为POST参数。如果这不是一个选项,您还可以考虑使用像http://bit.ly/等网址缩短服务。这些网址非常短。这一切都取决于URL首先来自何处。如果您可以控制这些URL的生成,为什么不给每个URL一个短ID,并将它们存储在一个表中,并在“解析”URL时查找它们?