在 asp.net 核心中设置 HTTPGet 调用的 MaxURLLength

Setting MaxURLLength of HTTPGet Call in asp.net core

您好,我需要使用 kestral 服务器更新 service fabric 集群上 asp.net 核心服务的 maxurllength,即 运行。 查看其他解决方案,人们建议对注册表和 web.config 进行更改,但是对于服务结构上的 Kestral 服务器 运行 asp.net 核心,我们没有任何 web.config 文件。 Kestral server limits 也没有公开这样做的方法。是否可以在 ASP.net 核心中这样做?

更新:

我使用 Service Fabric 反向代理来访问服务,有问题的示例 URL 是:

http://localhost:19081/{appname}/{servicename}/test-backend/v1.0/mode/1/context/5e2550ec-539a-4ea0-81b5-f783ce3f7c48/file/60917927-8a7d-4702-93e4-e2a5ea337937/version/2d826211703581a186b3d5d840e78117903189a5/openfile/W3sia2V5IjoiNjA5MTc5MjctOGE3ZC00NzAyLTkzZTQtZTJhNWVhMzM3OTM3OjJkODI2MjExNzAzNTgxYTE4NmIzZDVkODQwZTc4MTE3OTAzMTg5YTU6MCIsImNvbnRleHRJZCI6IjVlMjU1MGVjLTUzOWEtNGVhMC04MWI1LWY3ODNjZTNmN2M0OCIsImlNb2RlbElkIjoiNjA5MTc5MjctOGE3ZC00NzAyLTkzZTQtZTJhNWVhMzM3OTM3IiwiY2hhbmdlU2V0SWQiOiIyZDgyNjIxMTcwMzU4MWExODZiM2Q1ZDg0MGU3ODExNzkwMzE4OWE1Iiwib3Blbk1vZGUiOjEsIl9fbmFtZV9fIjoiSU1vZGVsVGlsZVJwY0ludGVyZmFjZV9JTW9kZWxUb2tlbiIsIl9fdW5yZWdpc3RlcmVkX18iOmZhbHNlfSwiMHgyWdpc3RlcmVkX18iOmZhbHNlfSwiMHgy

最后 URL 段是一些编码字符串是问题所在。

对于 ASP.NET Core 1.1 KestrelServerLimits.MaxRequestLineSize 应该是您正在寻找的。

对于 ASP.NET Core 2.1 KestrelServerLimits.MaxRequestLineSize 应该是您正在寻找的。

两者的默认值都是 8Kb,所以这应该比 chrome 和其他浏览器提供的默认 2083 Url 长度大得多。

如果您使用 Service Fabric 反向代理公开 API,问题应该出在反向代理而不是 Kestrel。

Service Fabric 反向代理使用 windows HTTP.sys 驱动程序公开 http 端点,根据 default 这被限制为每个段 260 个字符(每个斜杠 '/' 之间的值), 如果是这种情况,你应该用其他值配置你的机器,在这种情况下,你应该设置 UrlSegmentMaxLength

的值

为此,您必须在以下注册表项下创建一个名为 UrlSegmentMaxLengthDWORDHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters 并将其设置为 0 到 32,766 之间的数字。

我认为如果您提供真正的问题,我们可以提供更好的解决方案。

请注意:.NET Core 应用程序也可以使用 IIS 托管。在这种情况下,反向代理会与 Kerstel 对话。同样在“dotnet publish”期间,为这种情况创建了一个 web.config 以使 IIS 与 .NET Core 一起工作。

所以在这种情况下,这意味着您必须在两个地方设置这些托管级别更改。我在发现 post.

的 .NET Core 项目单元中配置 IIS 时遇到了很多问题