c# - ASP.Net WEB API 无法从移动设备发布大型 JSON 数据

标签 c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

我正在使用来自 Mobile 的 ASP.net WEB api。每次都失败。我收到此错误。

Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.

我已经在 Webconfig 上添加了 maxJsonLength

    <system.webServer>
    <modules>
      <remove name="FormsAuthentication" />
      <remove name="ApplicationInsightsWebTracking" />
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
    </modules>
    <validation validateIntegratedModeConfiguration="false" />
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483648" />
      </requestFiltering>
    </security>
  </system.webServer>
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="2147483644"/>
      </webServices>
    </scripting>
  </system.web.extensions>

这是我的 Controller ,我如何在 postDataForSync 方法中获取 JSON? 目前它在构造函数方法之后崩溃。

 public class MobileAPIController : Controller
{
    JavaScriptSerializer serializer;
    public MobileAPIController() {

        serializer = new JavaScriptSerializer();
        serializer.MaxJsonLength = Int32.MaxValue;

    }


    //
    //GET : MobileAPI/login

    public object login(string userId, string password)
    { 
    }

    //
    //GET : MobileAPI/getDataForSync
    public object getDataForSync(string userId) {

    }

    //
    //POST : MobileAPI/postDataForSync
    [HttpPost]
    public object postDataForSync(string syncData_)
    {
    }
}

错误,

[ArgumentException: Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Parameter name: input]
   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) +168
   System.Web.Mvc.JsonValueProviderFactory.GetDeserializedObject(ControllerContext controllerContext) +211
   System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext) +16
   System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext) +69
   System.Web.Mvc.ControllerBase.get_ValueProvider() +30
   System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +62
   System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +105
   System.Web.Mvc.Async.&lt;&gt;c__DisplayClass21.&lt;BeginInvokeAction&gt;b__19(AsyncCallback asyncCallback, Object asyncState) +743
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +14
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
   System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +343
   System.Web.Mvc.Controller.&lt;BeginExecuteCore&gt;b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +25
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
   System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +465
   System.Web.Mvc.Controller.&lt;BeginExecute&gt;b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) +18
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +20
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
   System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +374
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +16
   System.Web.Mvc.MvcHandler.&lt;BeginProcessRequest&gt;b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +52
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +384
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +48
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +159
</pre>
                        </code>
                    </td>
                </tr>
            </table>
            <br>
            <hr width=100% size=1 color=silver>
            <b>Version Information:</b>&nbsp;Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.3062.0

谢谢。

最佳答案

我用的是这样的方法

上一种方法

[HttpPost]
public object postDataForSync(string syncData_)
{
}

更新方法

[HttpPost]
public object postDataForSync()
{
 Stream req = Request.InputStream;
 req.Seek(0, System.IO.SeekOrigin.Begin);
 string json = new StreamReader(req).ReadToEnd();
 MyModel model = JsonConvert.DeserializeObject<MyModel>(json);
}

这个答案帮助我解决了这个问题。 -SO

关于c# - ASP.Net WEB API 无法从移动设备发布大型 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57174250/

相关文章:

C# 将 Vector3d/Point3d 转换为 double[]

c# - 为什么我的 .NET 4 应用程序知道 .NET 4 没有安装

c# - 使用 PayPal 创建按钮

asp.net - HttpRequest的HttpMethod和RequestType有什么区别?

c# - 如何在 Action 中调用和返回另一个 Controller Action 的输出?

c# - Jqgrid中如何显示间接数据

c# - 如何通过cmd运行windows窗体应用程序

c# - 如何使用 C# 在 Excel 中查找并替换单词/短语

java - C# 中的 Byte[]String 到 String

asp.net - 服务器重启后登录信息仍然存在