2017-02-15 83 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。

的變化是有效的之前,我需要,雖然重新啓動服務器。