增加对64KB以上的Kentico REST服务的POST或PUT请求的最大大小

时间:2018-03-22 18:47:54

标签: asp.net rest kentico

使用Kentico 10,我们遇到的问题是,对于转到[servername] / rest / services的任何请求,将最大请求限制大小提高到默认的64KB限制以上。超过该限制的所有POST或PUT请求都会遇到服务器错误413 - 请求实体太大。在应用程序的其他部分(例如Kentico Admin)中,此限制不存在,因为我们能够以更高的数据量发送POST和PUT请求。

我们已尝试将以下配置添加到我们的web.config文件中,但这不会影响64KB限制:

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2097151" />
    </requestFiltering>
  </security>
</system.webServer>

此外,我们已使用以下设置向web.config添加了位置元素:

<location path="rest">
  <system.web>
    <httpRuntime executionTimeout="2400" maxRequestLength="2097151" />
  </system.web>
  <system.webServer>
    <serverRuntime uploadReadAheadSize="2000000000" maxRequestEntityAllowed="32000000" />
    <security>
      <requestFiltering>
        <fileExtensions allowUnlisted="true" />
        <requestLimits maxAllowedContentLength="2147483648" />
      </requestFiltering>
    </security>
  </system.webServer>
</location>

上述配置更改都没有对超过64KB的POST或PUT请求产生任何影响。

Kentico通过URLRewritingEngine将任何请求路由到[servername] / rest / ...,并根据调用类型将这些请求重写为DocumentRESTService.svc,ObjectTranslationRESTService.svc或RESTService.svc。因此,将配置部分添加到system.serviceModel并不会影响这些服务的使用。

我们如何更改Kentico Web服务的此限制?

1 个答案:

答案 0 :(得分:1)

这可以通过将以下代码段添加到web.config文件末尾的<system.serviceModel>部分来完成:

<webHttpBinding>元素插入<bindings>子部分:

<webHttpBinding>
  <!-- Limits set to 10 MB (specified value in bytes) -->

  <binding name="RESTQuotaBinding" maxReceivedMessageSize="10485760" maxBufferPoolSize="10485760" maxBufferSize="10485760" closeTimeout="00:03:00" openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00">
     <readerQuotas maxDepth="32" maxStringContentLength="10485760" maxArrayLength="10485760" maxBytesPerRead="10485760" />
     <security mode="None" />
  </binding>
</webHttpBinding>

<service>子部分下添加<services>元素:

<service name="CMS.WebServices.RESTService">
   <host>
     <baseAddresses>
       <add baseAddress="http://localhost/KenticoCMS/rest" />
     </baseAddresses>
   </host>
   <endpoint address="" bindingConfiguration="RESTQuotaBinding" binding="webHttpBinding" contract="CMS.WebServices.IRESTService" />
</service>

https://docs.kentico.com/k10/integrating-3rd-party-systems/kentico-rest-service/configuring-the-rest-service#ConfiguringtheRESTservice-Enablinguploadoflargedata