增加 asp.net 核心中的最大 url 长度
Posted
技术标签:
【中文标题】增加 asp.net 核心中的最大 url 长度【英文标题】:Increase max url length in asp.net core 【发布时间】:2017-07-03 17:59:44 【问题描述】:我有一个 asp.net core web api,可以启用 tts 请求。你基本上是请求http://server.url/Whatever you want it to say.mp3
得到一个 mp3,其中包含 tts 中的文本。
但问题是,如果我将一个长字符串传递给它,它将返回一个400 - The request URL is invalid
。似乎服务器正在达到某种最大 URL 长度限制。我可以找到有关如何解决此问题的信息,即“经典”asp.net web.config,但不是如何在 asp.net 核心中解决此问题。
在 asp.net core 中增加最大 URL 长度的正确方法是什么?
更新:
具体的网址例如:
http://localhost:5000/api/mp3/nl-NL/male/1/Wikipedia%20is%20een%20online%20encyclopedie%20die%20tracht%20inhoud%20te%20bieden%20die%20vrij%20herbruikbaar,%20objectief%20en%20verifieerbaar%20is.%20Het%20project%20is%20gebouwd%20op%20vijf%20zuilen.%20De%20Nederlandstalige%20versie%20startte%20op%2019%20juni%202001%20en%20is,%20gemeten%20naar%20het%20aantal%20artikelen,%20met%20bijna%201,9%20miljoen%20artikelen%20de%20op%20vier%20na%20grootste%20taalversie.mp3
它是 URL 编码的。我会尝试找出确切的最大值是多少。
我不能使用 POST,因为要使用它的工具仅支持 mp3 文件的 url(因此我的控制器中使用了 .mp3 扩展名)。
更新 2
它接受的最长请求有 397 个字符,这看起来不太合乎逻辑。如果我再添加一个,它将返回一个代码 400。
更新 3
事实证明,只有在服务器上部署(使用 IIS)时才会出现这个问题,在本地运行时,它支持更长的字符串(我还没有看到它返回代码 400)。我将不得不查看 IIS 以了解它出错的地方。
【问题讨论】:
您使用的具体网址是什么? 你可以使用 POST 而不是 GET。 崩溃时到底有多大(多字符)?您是否尝试对您的网址进行 url_encoding(空格 =>%20
或 +
)?
【参考方案1】:
接受的解决方案对我不起作用。我在本地的 iis express 上运行 asp.net core 2.0。有效的是在 startup.cs 中“直接”配置 Kestrel。我不需要更改注册表或重新启动机器。
var host = new WebHostBuilder()
.UseKestrel(options =>
options.Limits.MaxRequestBufferSize = 302768;
options.Limits.MaxRequestLineSize = 302768;
)
我在 web.config 中添加了以下内容(尽管我不确定它是否有所作为。)
<requestLimits maxAllowedContentLength="1073741824" maxUrl="20480" maxQueryString="20480" />
这是我找到它的地方:https://titanwolf.org/Network/Articles/Article?AID=2fa1aad6-6b3d-479e-9770-a0850497d270
【讨论】:
在asp.net核心解决方案中哪里可以找到web.config文件?【参考方案2】:事实证明,我需要做两件事来解决这个问题:
更改 web.config
我需要将以下内容添加到 web.config 以指示 IIS 允许更长的 URL:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="false">
<requestLimits maxAllowedContentLength="30000000" maxUrl="40960" maxQueryString="20480" />
</requestFiltering>
</security>
</system.webServer>
编辑注册表
在此之后,IIS 仍然会抛出代码 400,因为 UrlSegment 长度太长。可悲的是,改变这种情况的唯一方法是通过一些小的注册表黑客攻击。
导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
并找到键UrlSegmentMaxLength。如果它不存在,请创建一个值为 REG_DWORD 的值类型。我使用 1000 HEX (4096 DEC) 作为值。如果密钥尚不存在,则默认值为 260。
在更改生效之前,我需要重新启动服务器。
【讨论】:
我一直在努力解决这个问题,直到我看到您的最后一条评论:“我需要重新启动服务器。”我很困惑重启 IIS 还不够。以上是关于增加 asp.net 核心中的最大 url 长度的主要内容,如果未能解决你的问题,请参考以下文章