3

我正在尝试做的事情是允许某人发布:

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

...Post(IEnumerable<MyModel> models)

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

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

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

4

1 回答 1

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 会根据传入的参数确定调用哪一个,但两者都会在幕后共享相同的代码。

更新:如果您的参数来自正文,这里描述了一些解决方案:如何使用 ASP.Net WebApi 重载方法?

于 2013-11-04T17:08:43.807 回答