首页 > 解决方案 > 如何使用 MVC Web Api GET 将对象作为参数传递

问题描述

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

我正在尝试这个。

这适用于 POST

网址

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

API定义为

[HttpPost]
public MyResponse Comparison(MyRequest request)

现在,我想将其更改为 GET

网址

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

API定义为

[HttpGet]
public MyResponse Comparison(MyRequest request)

如果我更新到

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

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

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

标签: restasp.net-core-webapi

解决方案


将复杂对象传递到 GET 端点/控制器的修复方法是

在 Javascript 中,我传递的 URL 是

/api/myapi/?para1=1¶2=hello¶3=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;}
}

推荐阅读