为什么在后请求中将字符串/ json发送到.netcore Web API导致null?

时间:2019-03-28 13:07:31

标签: json angular http asp.net-web-api asp.net-core

我有一个数组,正在使用JSON.stringify转换为JSON

const arrayOfUpdatesAsJSON = JSON.stringify(this.ArrayOfTextUpdates);

这将输出一些有效的JSON。

[{"key":"AgentName","value":"Joe Blogs"},{"key":"AgentEmail","value":"Joe@test.com"}]

当我要向服务器发送JSON时,我将内容类型设置为application / json

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
  })
};

按下按钮后,我会使用网址,正文和标题发出请求。

try {
  this.httpservice
    .post(
      url,
      arrayOfUpdatesAsJSON,
      httpOptions
    )
    .subscribe(result => {
      console.log("Post success: ", result);
    });
} catch (error) {
  console.log(error);
}

这很好用,并且符合我在api中期望的方法。

    [HttpPost("{id:length(24)}", Name = "UpdateLoan")]
    public IActionResult Update(string id, string jsonString)
    {
        Console.WriteLine(jsonString);
        ... and some other stuff
    }

该ID填充在url生成器中,该生成器填充ok。然后,我希望用我的请求的json填充api中变量jsonString的内容,但是它始终为null。我想念什么?

1 个答案:

答案 0 :(得分:1)

首先,您需要用jsonString标记[FromBody],以告知模型绑定程序绑定已发布json中的参数。而且,因为您期望纯string的值,所以您需要传递有效的json string(而不是object),因此您需要在JavaScript中调用其他JSON.stringify

const jsonArray = JSON.stringify(this.ArrayOfTextUpdates);
const arrayOfUpdatesAsJSON = JSON.stringify(jsonArray);

this.httpservice
    .post(
      url,
      arrayOfUpdatesAsJSON,
      httpOptions
)

控制器

[HttpPost("{id:length(24)}", Name = "UpdateLoan")]
public IActionResult Update(string id, [FromBody] string jsonString)