关于Model Binding的疑惑

gudamzero 2019-01-21 09:18:41
mvc5中,有一个接口需要接收参数id,返回一个json,那么根据Model Binding,我是这样写的
public class IdModel
{
[Required(ErrorMessage = "id不能为空")]
public int id { get; set; }
}
[System.Web.Http.HttpPost]
public string Abc(IdModel model)

那么调接口Abc的时候我就能获得一个IdModel 的实例model,通过model.id获取到参数。

但是有个很疑惑的地方,我们的接口很多,并且每个接口的传参都不一致,那么一般是怎样解决这个问题的呢?现在我是每一个接口都需要配一个专门的model的class,虽然也不太费事,但是还是挺麻烦的,有办法解决吗?
...全文
111 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gudamzero 2020-01-13
  • 打赏
  • 举报
回复
引用 6 楼 以专业开发人员为伍 的回复:
我们自己的服务端解析,大多数用的是 ExpandoObject 来定义输入参数,因为输入的模式会不断变化,例如后期增加了一些字段、甚至废弃了一些字段,为了保持灵活性,我们使用 ExpandoObject 或者 JObject 作为输入参数。一旦你定义好类型,你的代码中是否要检查“提交了某个属性”,那就是根据这个类型的编程知识来设计了!

但是不要胡乱用什么 object。你的知识深入到 ExpandoObject(也就是 IDictionary<string,object> 接口) 或者 JObject,你才足矣设计出来有内涵的代码。如果你用空洞外延的 object,就成了标题党了!


感谢,JObject和ExpandoObject 都符合我的需求
  • 打赏
  • 举报
回复
我们自己的服务端解析,大多数用的是 ExpandoObject 来定义输入参数,因为输入的模式会不断变化,例如后期增加了一些字段、甚至废弃了一些字段,为了保持灵活性,我们使用 ExpandoObject 或者 JObject 作为输入参数。一旦你定义好类型,你的代码中是否要检查“提交了某个属性”,那就是根据这个类型的编程知识来设计了! 但是不要胡乱用什么 object。你的知识深入到 ExpandoObject(也就是 IDictionary<string,object> 接口) 或者 JObject,你才足矣设计出来有内涵的代码。如果你用空洞外延的 object,就成了标题党了!
  • 打赏
  • 举报
回复
微软的所谓 WebApi 解析也是人写的,不是什么火星上的程序。它可以根据前端传来的命令来适配最合适的同名接口的不同重载,你也可以判断。动点脑筋自己写上几行代码。
  • 打赏
  • 举报
回复
如果你不知道具体参数类型,那么你就使用 ExpandoObject;或者你根据传来的对象的属性来适配不同的参数类型(写一个 switch case 分支判断,或者让接口处理实例统一地实现一个“判断命令模式是否适合兼容自己类型”的方法。 总之是深入一点点写上4、5行c#代码。需要有一点点创造力。
gudamzero 2019-01-21
  • 打赏
  • 举报
回复
引用 2 楼 以专业开发人员为伍 的回复:
除了所谓直接定义 Model 以外,对于接口其实也可以同时使用 JObject、ExpandoObject 之类的。只要能完备地符合前端访问 BLL 服务功能就行。

强类型的 Model 可以和弱类型的参数定义同时使用,这并不会改变 Model 的含义,只会更灵活一些!

很多情况下接口参数是不只一个的,每个都不太一样。每个接口确实是知道自己需要什么参数的,但是如果传参过来的东西是一致的,再由每个接口去解析是否符合需求,这样就最好了。比如如果可以这样获取:
public string Abc(object json){
string id=json.id;
if(id==null)
{
"缺少id"
}
}

这样的话我就可以统一预先做一些事情,比如如果我们约定a,b,c是固定要传的一些日志参数,自己接口用的参数写到json的params这个key里面,那么我就可以用一个统一的接口先处理abc,或者每个接口里面调统一的方法处理abc,然后再获取params里面的参数做解析

  • 打赏
  • 举报
回复
除了所谓直接定义 Model 以外,对于接口其实也可以同时使用 JObject、ExpandoObject 之类的。只要能完备地符合前端访问 BLL 服务功能就行。 强类型的 Model 可以和弱类型的参数定义同时使用,这并不会改变 Model 的含义,只会更灵活一些!
  • 打赏
  • 举报
回复
只有一个字段的 Model 有什么意义啊?你直接把 IdModel model 写为 string id 不就好了?! 每一个接口自然要定义自己的输入参数,如果懒得定义输入输出那怎么对输入计算输出?难道说用意念编程啊?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧