将格式整齐的 JSON 数据发送到 Web API asp.net 而不是默认的 [FromBody] 行为



我正在尝试找出一种以整洁(更自然)的方式将 Json 格式的数据发送到 Web api 控制器的方法。

让我解释一下。假设我有这个控制器:

[HttpPost]
public class StudentController : ApiController
{
    public void PostSomething([FromBody] string name, [FromBody] Student s) 
    {
        //do something
    }
}

我想发布的 json 数据是这样的(因为它的格式正确):

{
    "name" : "John",
    "student" : {
        "id" : "1",
        "age" : "22"
    }
}

但是我应该为 Web api 发送的内容parameter bind对象应该是这样的:

{
    "John",
    {
        "id" : "1",
        "age" : "22"
    }
}

问题是,如果我使用我想要的 json 格式,namestudent 对象在控制器的 PostSomething 方法中都将为 null。

如何将格式类似于第一个示例的 json 请求发送到我的 Web api 控制器?

为了使用所需的JSON结构,您可以更改PostSomething的方法签名并引入一个表示已发送数据的类。 例如

public class StudentTransferObject {
    public string Name {get; set;}
    public Student Student {get; set;}
}

使用控制器:

[HttpPost]
public class StudentController : ApiController
{    
    public void PostSomething([FromBody] StudentTransferObject studentInformation) 
    {
        //do something
    }
}
  1. 从响应正文中读取文本并自行解析对象:

    [HttpPost] public async Task<string> PostSomething() { string result = await Request.Content.ReadAsStringAsync(); //parse here how you want return result; }

  2. 使用自定义绑定或 JToken 进行动态序列化。