无法在 .NET Core 中使用超过 260 个字符的字符串作为 URL 的一部分
Not able to use string over 260 characters as a segment of URL in .NET Core
我提出的请求效果很好并且按预期运行。实际授权是使用 headers 提供的,并且也按预期工作。这是它的URL。
巧合的是,我碰巧用实际的标记替换了逐字字符串 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
我提出的请求效果很好并且按预期运行。实际授权是使用 headers 提供的,并且也按预期工作。这是它的URL。
巧合的是,我碰巧用实际的标记替换了逐字字符串 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