无法在 .NET Core 中使用超过 260 个字符的字符串作为 URL 的一部分

Not able to use string over 260 characters as a segment of URL in .NET Core

我提出的请求效果很好并且按预期运行。实际授权是使用 headers 提供的,并且也按预期工作。这是它的URL。

https://localhost:44385/api/security/check

巧合的是,我碰巧用实际的标记替换了逐字字符串 check,所以 URL 改为

https://localhost:44385/api/security/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ...

总而言之,令牌的长度恰好是 475 个字符。然后,在执行该调用时,我收到如下错误消息。

Error: connect ECONNREFUSED 127.0.0.1:44300

我不明白这个问题,状态代码 400 只告诉我请求错误。纯粹是因为 URL 的长度吗?好像有点太短了(虽然有限制,但我们说的是几千个字符)...

控制器中接收方法的签名如下所示。它驻留在路径为 Security.

的控制器中
[HttpHead("{check}"), Authorize]
public IActionResult IsAuthorized(string check) { ... }

我也尝试使用 GET 而不是 HEAD,结果相同。仅根据 400 Bad request 很难了解有关错误的更多信息。这有点像 某处出了点问题 之类的错误。

经过一些试验,我可以确认 不是 URL 本身的长度,而是斜杠之间的段的长度。第一个请求有效,另一个也有效,但第三个无效。 xxx 部分正好是 260 个字符,**yyy* 部分正好是 261.

https://localhost:44385/api/test/xxx
https://localhost:44385/api/testtest/xxx
https://localhost:44385/api/test/yyy

这是怎么回事?!就像我的 WebAPI 中的方法中的 string 不能超过 260 个字符。不是 256,这至少有某种意义...

谷歌搜索给出了 veeery 范围广泛的广泛点击,但没有给我任何可以联系到的东西。 Postman 提供几乎相同的有限信息。浏览器的网络选项卡给的更少。

有点困惑如何了解更多,如何进一步诊断 and/or google 有什么用。由于它是生产环境的 non-problem,我不能打扰我的同事 - 这个问题纯粹是学术性的。

The limit you're hitting is UrlSegmentMaxLength (260).

This is all the way down in Http.Sys and only configurable in the registry.

Workaround: break it up into multiple path segments, or move it to the query or body. Or use Kestrel without IIS.

资源:https://github.com/aspnet/AspNetCore/issues/2823#issuecomment-360921436


这是一个相关的post:

  • Setting UrlSegmentMaxLength from commadline