如果内容长度> 7kb使用C#,则无法在WebRequest上发布

Jef*_*ala 6 c# json web-services httpwebrequest httpwebresponse

我正在尝试将Json发布到我们的Web服务.我的问题是,当我的request.ContentLength超过7kb时.我将在request.GetResponse()处获得Web异常500.但是如果我的request.ContentLength低于7kb,我的帖子就成功发送了.

错误信息:

 The remote server returned an error: (500) Internal Server Error.
Run Code Online (Sandbox Code Playgroud)

源代码:

public static string JsonPost(string url, string method, string postData)
{
    Uri address = new Uri(url + method);
    HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
    request.Method = "POST";
    request.ContentType = "application/json";
    byte[] byteData = UTF8Encoding.UTF8.GetBytes(postData);
    request.ContentLength = byteData.Length;
    using (Stream postStream = request.GetRequestStream())
    {
        postStream.Write(byteData, 0, byteData.Length);
    }
    try
    {
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string JsonResponse = reader.ReadToEnd();
            return JsonResponse;
        }
    }
    catch (WebException ex)
    {
        string message = ((System.Net.HttpWebResponse)(ex.Response)).StatusDescription;
        if (message.Contains("busy"))
            return message;
        else
            throw new Exception(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

Web.config文件:

        <?xml version="1.0"?>

<configuration>
  <appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>

  <system.web>
    <httpRuntime executionTimeout="180" maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false" minFreeThreads="8"
    minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />

    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>

    <authentication mode="Forms">
      <forms loginUrl="~/Home/" cookieless="AutoDetect" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)

异常日志:

    (System.Net.HttpWebResponse)(ex.Response)   {System.Net.HttpWebResponse}    System.Net.HttpWebResponse
    base    {System.Net.HttpWebResponse}    System.Net.WebResponse {System.Net.HttpWebResponse}
        CharacterSet    "ISO-8859-1"    string
        ContentEncoding ""  string
        ContentLength   1047    long
        ContentType "text/html" string
        Cookies {System.Net.CookieCollection}   System.Net.CookieCollection
        Headers {
            Access-Control-Allow-Origin: *
            Content-Length: 1047
            Cache-Control: private
            Content-Type: text/html
            Date: Tue, 18 Sep 2012 22:33:36 GMT
            Set-Cookie: ASP.NET_SessionId=belurseo1i0ureppkspetw1a; path=/; HttpOnly
            Server: Microsoft-IIS/7.0
            X-AspNet-Version: 4.0.30319
            X-Powered-By: ASP.NET
        }   System.Net.WebHeaderCollection
        IsMutuallyAuthenticated false   bool
        LastModified    {9/19/2012 6:34:07 AM}  System.DateTime
        Method  "POST"  string
        ProtocolVersion {1.1}   System.Version
        ResponseUri {http://localhost/service.svc/Update}   System.Uri
        Server  "Microsoft-IIS/7.0" string
        StatusCode  InternalServerError System.Net.HttpStatusCode
        StatusDescription   "The server encountered an error processing the request. Please see the server logs for more details."  string
        SupportsHeaders true    bool
Run Code Online (Sandbox Code Playgroud)

Ice*_*ind 0

尝试这个:

%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength:1000000
Run Code Online (Sandbox Code Playgroud)

或者如果您只想为您的应用程序设置它:

%windir%\system32\inetsrv\appcmd set config "Default Web Site/<your app>" -section:requestFiltering -requestLimits.maxAllowedContentLength:1000000
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更多限制选项。

希望这可以帮助