javascript - 从 JavaScript 发送消息到处理程序

标签 javascript asp.net google-chrome httphandler

我有一个在 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)。

我看到了类似的问题here ,但没有得到答复 (设置 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>

最佳答案

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

在 .ashx 中执行此操作的完整但复杂的示例可以在以下位置找到: How to post data from a webform page to an HTTPHandler.ashx file? 这会注入(inject)一个文件 uploader ,然后将"file"数据分段发布到处理程序中。凌乱。

您可以通过组合来自的多部分xhr.send来更直接地做到这一点 XMLHttpRequest POST multipart/form-data 与答案的第一部分类似的方法可能使用 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);
   });

来自Multipart form POST using ASP.Net Web API

甚至可能来自 .NET 4.5 async how to read multi part form data in .net web api controller

关于javascript - 从 JavaScript 发送消息到处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18121367/

相关文章:

html - 无法水平滚动以访问 chrome 中的内容

javascript - 最简单的 JQuery 验证规则示例

运行后添加 div 标签时,Javascript 无法在 div 标签中工作

javascript - "onscroll"在重绘之后或之前触发?

c# - 为什么 "Session_end"不起作用?

google-chrome - Google Chrome 控制台不会自动向下滚动

javascript - 你能有多种方法来运行 Javascript 中的函数吗?

asp.net - 在 Eclipse 中拖放 Web 项目

asp.net - 从自定义控件访问 ToolKitScriptManager/ScriptManager

java - 带有 chromedriver 的 Selenium 根据 "headless"参数给出不同的结果