我有一个asp.net核心web api,可以启用tts请求。你基本上要求http://server.url/Whatever you want it to say.mp3
获取一个包含tts中所用文字的mp3。
但问题是,如果我传递一个长字符串,它将返回400 - The request URL is invalid
。看起来服务器正在达到某种最大URL长度限制。我可以找到有关如何解决这个问题的信息,这是" classic" asp.net web.config,但不是如何在asp.net核心中解决这个问题。
在asp.net核心中增加最大URL长度的正确方法是什么?
更新
确切的网址是:
它是URL编码的。我会试着找出确切的最大值。
我不能使用POST,因为要使用它的工具只支持mp3文件的url(因此我的控制器中使用的.mp3扩展名)。
更新2
它接受的最长请求有397个字符,这似乎不合逻辑。如果我再添加一个,它将返回代码400。
更新3
事实证明,当在服务器上部署时(使用IIS)只有这个问题,当在本地运行时,它支持更长的字符串(我还没有看到它返回代码400)。我必须查看IIS以查看它出错的地方。
答案 0 :(得分:5)
事实证明,我需要两件事来解决这个问题:
更改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.
在更改生效之前,我需要重新启动服务器。