ASP.NET WebApi不接收post数据

我需要使用WebApi接收一些字符串和二进制数据。 我用这种方式创建了一个控制器:

[HttpPost] public void Post(byte[] buffer) { // Some code goes here } 

这是溃败:

  routes.MapHttpRoute( name: "CuscarD95B", routeTemplate: "D95B/{controller}", defaults: new { buffer = RouteParameter.Optional }, constraints: new { controller = @"Cuscar" } 

现在,当我尝试发布一些数据时,缓冲区总是byte [0](零长度数组)。 没有数据传递给控制器​​。

任何帮助,将不胜感激。

谢谢。

如果您一直在努力反序列化正文,请尝试手动执行以查看您是否实际正在正确发送它。

 [HttpPost] public void Post() { string body = Request.Content.ReadAsStringAsync().Result; } 

我们通过HttpPost方法传递Json对象,并在动态对象中解析它。 它工作正常。 这是示例代码:

 ajaxPost: ... Content-Type: application/json, data: {"name": "Jack", "age": "12"} ... 

的WebAPI:

 [HttpPost] public string DoJson2(dynamic data) { string name = data.name; int age = data.age; return name; } 

如果存在Complext对象类型,则需要使用以下方法解析动态类型:

JsonConvert.DeserializeObject (data.ToString());

这里有一个复杂的数据内容示例,它包括数组和字典对象。 { “AppName的”: “SamplePrice”, “AppInstanceID”: “100”, “ProcessGUID”: “072af8c3-482a-4b1c -890b-685ce2fcc75d”, “用户ID”: “20”, “用户名”: “杰克”, “NextActivityPerformers”:{ “39 c71004-d822-4c15-9ff2-94ca1068d745”:[{ “用户ID”:10 “用户名”: “史密斯”}]}}

我能够在我的请求体中发布一个byte [],并且该值成功地进行了模型绑定。 是否设置了内容类型? 请注意,简单的字符串在这里被认为是有效的JSON,因此如果您的请求的content-type设置为application / json,它应该可以工作…

话虽如此,你可以简单地让你的POST方法需要来自body的字符串而不是byte [],并将content-type设置为application / json:

 [HttpPost] public void Post([FromBody]string buffer) { // Some code goes here } 

我不确定如何将byte[]发送到webApi,但你可以做的是将二进制数据作为Base64 string传递给你的控制器,然后将base64 string转换为byte[]

我在这里找到了解决方案。 看起来我们需要创建自定义MediaTypeFormatter来实现原始类型反序列化。

您是否尝试在没有[FromBody]情况下使用HttpPostedFileBase?

 public void Post(HttpPostedFileBase buffer)