【问题标题】:Error during serialization or deserialization using in asp.net webapi POST在 asp.net webapi POST 中使用序列化或反序列化时出错
【发布时间】:2020-10-02 16:41:03
【问题描述】:

我试图在一个对象中发布 2 个图像(4MB + 大小)的 base64 字符串。这是模型示例:

public class DemoModel
{
    public string No{ get; set; }
    public string OneBase64 { get; set; }
    public string TwoBase64 { get; set; }
}

这是我尝试在 webapi 控制器中捕获 POST ed 数据的方式。

  [HttpPost]
  public string PostSimpleData([FromBody] DemoModel data)
    { 
       // do something 
    }

但是当我发布 json 时,它会显示序列化/反序列化错误。

然后我在 webconfig 中添加了几行来增加响应大小和 json 大小。

<system.web.extensions>
    <scripting>  
         <webServices>                                                   
             <jsonSerialization maxJsonLength="2147483647" />                 
         </webServices>
    </scripting>
</system.web.extensions>

和

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2147483647" />
  </requestFiltering>
</security>

和

<httpRuntime targetFramework="4.5" maxRequestLength="2147483647" />

还是没有结果。 如果我发布除 Base64 数据之外的任何内容,它会自动序列化并与控制器方法中的对象绑定。

这是我要发布的 JSON。

{
   "NO" : "01",
   "OneBase64" : "Some base 64 Data",
   "TwoBase64" : "Some base 64 Data"
}

感谢任何形式的帮助。

【问题讨论】:

  • 我相信您的 web.config 中的设置适用于 WebMethod,但不适用于 Web API 或 MVC。您将其标记为 MVC 和 Web API - 您使用的是哪个?您需要找到一种方法来调整框架正在使用的序列化程序的最大大小。
  • 我正在使用 Web Api 2。你能建议我应该如何调整序列化程序的最大大小吗?我也使用了“”。
  • this 能解决您的问题吗?
  • @mason 我已经试过了。我添加了这一行,但没有。没有运气。

标签: c# asp.net-web-api


【解决方案1】:

我从这里改变了我的方法

[HttpPost]
public string PostSimpleData([FromBody] DemoModel data)
{ 
   // do something 
}

到这里

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

   //Now i Can Do whatever I want with this data
 }

它就像一个魅力。感谢这个帖子ASP.Net WEB API Failing POST Large JSON data from Mobile

【讨论】:

    【解决方案2】:

    您需要通过应用 serializer.MaxJsonLength = Int32.MaxValue; 来直接配置您的 web api 而是您的发送者序列化程序实例,您从哪里发送该 json 对象

    【讨论】:

    • 我正在从 android & web (vue js) 应用程序发送数据。在 android 中,我使用 GSON 制作了一个 json 。 Gson gson = 新 Gson();字符串 json = gson.toJson(data);在此之后,我像这样发布数据。字符串响应 = mReq.sendPost(fullUrl, json, "application/json");你能建议我应该在哪里进行更改吗????
    • 不,这个答案根本不适用。尝试将 JSON 转换为 .NET 对象时,服务器上发生错误,因此更改客户端上序列化程序的设置不会有任何影响。
    猜你喜欢
    • 2021-09-02
    • 2015-01-11
    • 2011-12-17
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多