rest - 如何使用 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 序列化,所以我不需要在每个端点都进行序列化。
解决方案
将复杂对象传递到 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;}
}
推荐阅读
- ios-simulator - 我可以一次在多个 iOS 模拟器上运行我的 Expo 应用程序吗?
- firebase - 归档 Firebase 云 Firestore
- swift - 实体中的一个属性导致swift4中的值为nil
- javascript - 赛普拉斯:检查浏览器是否处于全屏模式
- docker - 如何在 tileserver-gl 服务器上使用自定义字体(字形)?
- laravel - 如何动态启用 Laravel Debugbar?
- jsf - 从@ManagedBean 更改为@Named 不起作用
- android - 单击即可隐藏 AppBarLayout 和 BottomNavigationView
- google-chrome - 通过 XMLHttp 发送两个缓冲区
- python - Django:从 CSV 创建数据库表时出现 KeyError