首页 > 解决方案 > 在 asp.net webapi POST 中使用序列化或反序列化时出错

问题描述

我试图在一个对象中发布 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"
}

任何形式的帮助表示赞赏。

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

解决方案


我从这个改变了我的方法

[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


推荐阅读