如何知道我的 WebRequest 是否已满?

How to know if my WebRequest is full?

我在 C# 中创建了一个 WebRequest

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://myURL");

URL 是一个请求,可能会变大。实际上,根据用户的操作,我无法控制大小。

为了防止请求过长,我想解析一下。

我可以用来创建有效 WebRequeststring 的最大长度是多少?

在内部,url 字符串被解析为 Uri class 实例 - 接受 Uri 实例的 WebRequest.Create 的第二个重载被调用。如果满足以下条件,您将获得 UriFormatException

The length of uriString exceeds 65519 characters or The length of the scheme specified in uriString exceeds 1023 characters.

来源:Uri Constructor (String) MSDN

并非所有浏览器都支持这么长的 uri,但如果您以编程方式创建 Web 请求,您将仅取决于服务器限制。

您将受到接收请求的服务器的限制,这将因服务器和配置而异。例如,Apache 将默认最大长度约为 8100 个字符,但这只是默认值。一个好的经验法则是 ~2000 个字符,因为这是大多数浏览器的最大值。至于HTTP spec,它是没有限制的,但是你会发现任何服务器都可以随心所欲地限制它。如另一个答案中所述,Uri 会将其限制为大约 65k 个字符。

关于 Apache 最大长度的问题 URL:What is apache's maximum url length?

所以关于浏览器限制的问题: What is the maximum length of a URL in different browsers?

RFC7230之后对URL尺码没有限制,建议

that all HTTP senders and recipients support, at a minimum, request-line lengths of 8000 octets.

但是 WebRequest 存在物理限制,它包含在 maximum of 65519 chars

this answer 中所述,有用的限制是大约 2000 个字符。

如果您想通过 URL 发送许多参数,使用 POST 可能是更适合您需要的解决方案。这样实际的 URL 就不会失控,并且您的请求正文的限制要高得多。