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

Posted

技术标签:

【中文标题】如何使用 MVC Web Api GET 将对象作为参数传递【英文标题】:How to pass an object as a parameter with MVC Web Api GET 【发布时间】:2021-09-25 22:58:02 【问题描述】:

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

我正在用 get 尝试这个。

这适用于 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 对象 - 我很懒而且我想使用 MVC 序列化的自动化,所以我不需要在每个端点都进行序列化。

【问题讨论】:

你能显示你的整个 javasctipt 代码,包括 myJsonObj,请? 您可以从这里了解更多关于什么是模型绑定、它的工作原理以及如何自定义其行为:docs.microsoft.com/en-us/aspnet/core/mvc/models/… 是的。当您知道术语时,搜索文档总是更容易......我什至没有想到模型绑定这个词,我认为它是“通过”。谢谢你的链接,我会做一些额外的阅读! 【参考方案1】:

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

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;

【讨论】:

以上是关于如何使用 MVC Web Api GET 将对象作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

在自定义授权 MVC4 Web Api 中访问 post 或 get 参数

如何将类型的对象作为参数传递给Web Api Get / Post方法

如何启用 CORS (JS + MVC Web API)

MVC Web API & jsonp

使用 GET 将数据作为复杂对象从 API 控制器请求数据

我应该如何将多个参数传递给 ASP.Net Web API GET?