0

ASP.NET 3.5、IIS7

在我的 Global.asax 的 Application_BeginRequest 中,我需要从请求的 URL 中提取一个完全独立的 URL,该 URL 已嵌入其中而不使用 query string

我想出的解决方案是对整个目标 URL 进行十六进制编码,就好像它是一个目录一样,如下所示:

http://localhost/687474703A...etc...732E6D7033/irrelevantFilename.txt

这对 IIS7 来说是失败的,它的ASP.NET 实现不会容忍 URL 路径大于 260 个字符

我的代码控制如何生成请求 URL,以及如何将目标 URL 嵌入其中,但它无法控制该目标 URL 值(它们是第三方 URL)。

在我的请求 URL 中嵌入这个目标 URL 的效果如何?

4

1 回答 1

2

您可以对其进行 URL 编码,或者使用 base-64 对其进行编码。两者通常都比十六进制编码更紧凑。

注意:如果 URL 长度超过 200 个字符,那么 260 个字符的限制无论如何都会成为问题。如果 URL 长度超过 260 个字符......好吧,你可以做数学 :-)

不过,我不太明白为什么你甚至需要一个单独的文件。您可以使用 404 处理程序,或者只是为每个请求提前解析。

顺便说一句:如果您可以选择,最好使用 cookie 或作为 POST 参数嵌入 URL。如果这不是一个选项,您还可以考虑使用 URL 缩短服务,例如http://bit.ly/等。这些 URL 真的很短。这一切都取决于 URL 的来源。如果您可以控制这些 URL 的生成,为什么不给它们每个短 ID,并将它们存储在一个表中,并在“解析”URL 时查找它们呢?

于 2010-01-19T00:07:57.830 回答