WebAPI,将一个或集合对象发布到相同的操作而不更改消息正文

时间:2013-11-04 17:02:08

标签: c# asp.net asp.net-mvc asp.net-web-api

我正在尝试做什么,允许有人发布:

[{...}, {...}] or {...}到路线,并将其正确绑定到:

... Post(IEnumerable<MyModel> models)

如果我发布了一个集合([{...}, {...}],但我希望它能创建一个包含一个对象的集合,当我也将有效的json发布为单个对象({...})时,我的工作正常/ p>

我尝试这样做的原因是因为我们的API动态地针对用户在运行时定义的模型,因此我不知道uri是代表列表还是单个资源。

我可以通过客户IModelBinder实现这一点,但我想知道是否有办法让jsonserializer在没有任何自定义代码的情况下处理这个用例?

1 个答案:

答案 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?