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

时间:2017-02-15 07:35:26

标签: asp.net-core asp.net-core-webapi

我有一个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长度的正确方法是什么?

更新

确切的网址是:

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以查看它出错的地方。

1 个答案:

答案 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.

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