如何使用 MVC Web Api GET 将对象作为参数传递

How to pass an object as a parameter with MVC Web Api GET

在 MVC 中,当我 post 时,我可以将一个 json 对象传递给我的 MVC 控制器。我猜,在幕后,MVC 通过 属性 名称映射 属性 值。

我正在尝试使用 get。

这适用于 POST

URL

"/api/myapi/?request=" + JSON.stringify(myJsonObj

API定义为

[HttpPost]
public MyResponse Comparison(MyRequest request)

现在,我想把它改成GET

URL

"/api/myapi/?request=" + JSON.stringify(myJsonObj

API定义为

[HttpGet]
public MyResponse Comparison(MyRequest request)

如果我更新到

[HttpGet]
public MyResponse Comparison([FromQuery] MyRequest request)

然后到达终点,但是request中的每个属性都是null

原因是,在 XY 的情况下,虽然我可以在我的控制器上使用查询字符串和多个输入参数来实现这一点,但这意味着我必须为每个点手动创建 MyRequest 对象 -我很懒,我想使用 MVC 序列化的自动功能,所以我不需要在每个端点都进行序列化。

将复杂对象传递到 GET 端 point/controller 的修复方法是

在Javascript内,我通过的URL是

/api/myapi/?para1=1&para2=hello&para3=2021-09-09"

终点是

[HttpGet]
public MyResponse Comparison([FromQuery] MyRequest request)

MyRequest的定义是

public class MyRequest
{
    public int para1 {get;set;}
    public string para2 {get;set;}
    public string para3 {get;set;}
}