我正在尝试做什么,允许有人发布:
[{...}, {...}] or {...}
到路线,并将其正确绑定到:
... Post(IEnumerable<MyModel> models)
如果我发布了一个集合([{...}, {...}]
,但我希望它能创建一个包含一个对象的集合,当我也将有效的json发布为单个对象({...}
)时,我的工作正常/ p>
我尝试这样做的原因是因为我们的API动态地针对用户在运行时定义的模型,因此我不知道uri是代表列表还是单个资源。
我可以通过客户IModelBinder实现这一点,但我想知道是否有办法让jsonserializer在没有任何自定义代码的情况下处理这个用例?
答案 0 :(得分:2)
一种解决方案是让两个API方法调用执行相同逻辑的私有方法。例如:
public HttpResponseMessage Post(IEnumerable<MyModel> models)
{
return DoSomething(models);
}
public HttpResponseMessage Post(MyModel model)
{
return DoSomething(new List<MyModel> { model });
}
private HttpResponseMessage DoSomething(IEnumerable<MyModel> models)
{
// Do something
}
Web API会根据传入的参数确定调用哪一个,但两者都会共享相同的代码。
更新:如果您的参数来自正文,则此处介绍了一些解决方案:How to work with ASP.Net WebApi overloaded methods?