1

我有在 javascript 中运行的客户端代码,它试图将 html 内容发送到自定义处理程序。

客户端代码如下所示:

   ...
    $('#txt_content').val($(div).html());
        performClick($('#submit_excel_form'));

处理程序代码是:

public void ProcessRequest(HttpContext context)
        {
            string name = context.Request["txt_name"];
            string content = context.Request["txt_content"];
           ...
        }

问题是使用 Chrome 浏览器时,处理程序获取的消息 (txt_content) 不完整。我得到的最大字符串长度是:524288

当我在 explorer 中运行时,我得到了完整的消息(长度=567130)。

我在这里看到了一个类似的问题,但没有得到回答(设置 maxAllowedContentLength 的解决方案不起作用)。

将不胜感激任何帮助。谢谢, 奥马尔

编辑:

这是配置文件中的相关部分:

<webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
    <customErrors mode="Off" defaultRedirect="Default.aspx">
      <error statusCode="500" redirect="Default.aspx"/>
      <error statusCode="404" redirect="404.aspx"/>
    </customErrors>
    <globalization culture="he-IL" uiCulture="he-IL" resourceProviderFactoryType="BusinessLogic.Culture.CultureProviderFactory" enableClientBasedCulture="false"/>
    <compilation debug="true">
      <assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
      </assemblies>
    </compilation>
    <httpRuntime requestValidationMode="2.0" maxRequestLength="2097151" requestLengthDiskThreshold="8192000"/>
    <authentication mode="Forms"/>
    <pages clientIDMode="Static" validateRequest="false">
      <controls>
        <add tagPrefix="amr" namespace="BusinessLogic.Controls" assembly="BusinessLogic"/>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
      <namespaces>
        <add namespace="Infrastructure"/>
        <add namespace="CommonData"/>
      </namespaces>
    </pages>
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
        <providerOption name="CompilerVersion" value="v3.5"/>
        <providerOption name="OptionInfer" value="true"/>
        <providerOption name="WarnAsError" value="false"/>
      </compiler>
    </compilers>
  </system.codedom>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483648" />
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ScriptModule"/>
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <remove name="ScriptHandlerFactory"/>
      <remove name="ScriptHandlerFactoryAppServices"/>
      <remove name="ScriptResource"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </handlers>
  </system.webServer>
4

1 回答 1

1

您可能可以通过多部分帖子绕过此限制/错误。

在 .ashx 中执行此操作的完整但复杂的示例可以在以下位置找到: 如何将数据从 web 表单页面发布到 HTTPHandler.ashx 文件? 这会注入一个文件上传器,然后将“文件”数据分段发布到处理程序中。凌乱。

通过将XMLHttpRequest POST multipart/form-dataxhr.send中的 multipart与 类似于答案第一部分的方法结合起来,您可以更直接地做到这一点,可能使用BinaryReader b = new BinaryReader(FileUpload1.PostedFile.InputStream);

或者

   //read content into a buffer
   request.Content.LoadIntoBufferAsync().Wait();

   request.Content.ReadAsStringAsync().ContinueWith(t =>
   {
       apiRequest.Content = t.Result;
       _repo.Add(apiRequest);
   });

使用 ASP.Net Web API从Multipart 表单 POST

甚至可能是 .NET 4.5async如何在 .net Web api 控制器中读取多部分表单数据

于 2013-08-09T16:00:34.960 回答