增加asp.net核心中的最大URL长度

mje*_*son 2 asp.net-core asp.net-core-webapi

我有一个asp.net核心网络API,可启用tts请求。您基本上要求http://server.url/Whatever you want it to say.mp3获得带有tts语音文本的mp3。

但是问题是,400 - The request URL is invalid如果我传递一个长字符串,它将返回a 。好像服务器正在达到某种最大URL长度限制。我可以找到有关如何解决此问题的信息,这是“经典” asp.net web.config,而在asp.net核心中却找不到如何解决此问题。

在asp.net核心中增加最大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%20aant 20artikelen,%20met%20bijna%201,9%20miljoen%20artikelen%20de%20op%20vier%20na%20grootste%20taalversie.mp3

它是URL编码的。我将尝试找出确切的最大值。

我无法使用POST,因为要利用它的工具仅支持mp3文件的网址(因此,在控制器中使用了.mp3扩展名)。

更新2

它接受的最长请求包含397个字符,这似乎不太合逻辑。如果再添加一个,它将返回代码400。

更新3

事实证明,仅当将其部署在服务器上(使用IIS),在本地运行时,它才支持更长的字符串(我还没有看到它返回代码400)。我将不得不调查IIS,看看它出了什么问题。

mje*_*son 6

事实证明,我需要解决以下两个问题:

更改web.config

我需要将以下内容添加到web.config中,以指示IIS允许使用更长的URL:

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="false">
            <requestLimits maxAllowedContentLength="30000000" maxUrl="40960" maxQueryString="20480" />
        </requestFiltering>
    </security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

编辑注册表

此后,IIS仍将抛出代码400,因为UrlSegment的长度太长。可悲的是,更改此设置的唯一方法是通过一些较小的注册表黑客攻击。

导航至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters并找到键UrlSegmentMaxLength。如果不存在,请使用REG_DWORD的值类型创建一个。我使用1000 HEX(4096 DEC)作为值。如果密钥尚不存在,则默认值为260。

在更改生效之前,我需要重新启动服务器。