Как отправить строку base64 в URL? - PullRequest
1 голос
/ 03 июня 2019

У меня есть ионное приложение, через которое я хочу отправить строку base64 моей службе WCF.Так как строка base64 огромна, я получаю следующую ошибку: « HTTP Error 414. URL-адрес запроса слишком длинный. » Я разместил эту службу в IIS.Есть ли способ заставить это работать?Я попытался найти эту проблему в Интернете, но ничего не нашел.

это мой метод -

 [OperationContract]
        [WebInvoke(Method = "POST",UriTemplate = "/ReportaBug?base64String={base64String}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json )]
        void ReportaBug(string base64String);

, а это мой файл web.config -

 <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime  targetFramework="4.6.2" maxUrlLength="32768" maxQueryStringLength="32768"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0"/>
    <services>
      <service name="FusionRestService.FusionRestService" behaviorConfiguration="ServiceBehavior">
        <endpoint binding="webHttpBinding" contract="FusionRestService.IFusionRestService" behaviorConfiguration="web"></endpoint>
        <endpoint
            address="mex"
            binding="mexHttpBinding"
            contract="IMetadataExchange"/>
      </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <security>
      <requestFiltering>
         <requestLimits maxQueryString="32768"/>
      </requestFiltering>
    </security>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>

1 Ответ

0 голосов
/ 05 июня 2019

это ошибка IIS, сообщающая, что длина данного URL-адреса превышает ограничение. Максимальная длина URL-адреса IIS определяется свойством HttpRuntimeSection.MaxUrlLength. Его значение составляет 260 символов. Это может вызвать проблемы с более длинными, чем настроенные maxUrlLength URL, и вот как решить эту проблему: https://www.saotn.org/the-length-url-request-exceeds-configured-maxurllength-value/

UPDATE Я проверил ваш код на моем локальном хосте, и он работает нормально я просто добавил эти параметры в мой web.config

<httpRuntime targetFramework="4.6.2" maxUrlLength="32768" maxQueryStringLength="32768" />

и

<security>
  <requestFiltering>
    <requestLimits maxQueryString="32768"/>
  </requestFiltering>
</security>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...