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
这里有一个复杂的数据内容示例,它包括数组和字典对象。 { “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)