2017-02-15 57 views
0

我有一个asp.net核心web api,它支持tts请求。你基本上要求http://server.url/Whatever you want it to say.mp3得到一个mp3文本用tts说话。在asp.net核心中增加最大网址长度

但问题是,这样它会返回一个400 - The request URL is invalid如果我通过它的长字符串。这似乎是服务器正在达到某种最大的URL长度限制。我可以找到有关如何解决这个问题的信息是“经典”的asp.net web.config,但不是如何解决这个问题在asp.net核心。

什么是asp.net核心增加最大URL长度的正确方法是什么?

更新:

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

+0

什么是您使用的确切URL? – koelkastfilosoof

+0

您可以使用POST而不是GET。 – juunas

+0

究竟是多大(mancy characters)在崩溃时?您是否尝试过url_encoding您的网址(空格=>'%20'或'+')? –

回答

2

事实证明,我需要做两两件事来解决这个问题:

变化的web.config

我需要以下添加到Web.config指示IIS以允许更长的网址:

<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。

的变化是有效的之前,我需要,虽然重新启动服务器。