POST请求:Webapi从角度客户端接收空内容

时间:2018-04-19 06:59:44

标签: post asp.net-web-api http-post

我正在尝试将对象发布到我的API,但它无法在那里使用。

客户代码

const url = '/odata/StammVersicherter';
        const headers = new Headers();
        headers.append('Content-Type', 'application/json');
        const requestBody = JSON.stringify(data);
        return this._http.post(url, requestBody , { headers: headers }).map(
            res => {
                // do something with the response
            }
        );

结果请求 enter image description here

Api代码

public async Task<IHttpActionResult> Post([FromBody]Data data)
    {
      string content = await this.Request.Content.ReadAsStringAsync(); // empty! 
      if (!ModelState.IsValid)
      {
        return BadRequest(ModelState);
      }
      _dataContext.Data.Add(data);

      await _dataContext.SaveChangesAsync();

      return Created(versicherter);
    }

当此调用到达我的api方法时,Data对象为null。有什么快速的想法吗?

3 个答案:

答案 0 :(得分:1)

当您使用POST请求时,您应该继续使用 “content-type”:“application / x-www-form-urlencoded”,

下面是javascript中的参考代码。

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "your URL HERE",
  "method": "POST",
  "processData": false,
  "contentType": false,
  "content-type": "application/x-www-form-urlencoded",
   "data": {
"username": "srussell@org.com.au.test",
"password": "test",
 }    }

$.ajax(settings).done(function (response) {
  console.log(response);
});

答案 1 :(得分:1)

那么你可以发送如下数据,但你的json数据键字段应该与服务器端的模型匹配。

var settings = {
      "async": true,
      "crossDomain": true,
      "url": "Your URL",
      "method": "POST",
      "headers": {
        "content-type": "application/json",
        "cache-control": "no-cache",

      },
      "processData": false,
      "data": "{\"Name\":\"abc\",\"EMail\":\"abc@xyz.com\"}"
    }

    $.ajax(settings).done(function (response) {
      console.log(response);
    });

答案 2 :(得分:0)

正如我对原始问题的评论所示:JSON Serializer遇到错误导致内容为空