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

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

我想做的是允许某人发布:

[{...}, {...}] or {...}到路由并将其正确绑定(bind)到:

... Post(IEnumerable<MyModel> models)

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

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

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

最佳答案

一种解决方案是让两个 API 方法调用一个执行相同逻辑的私有(private)方法。例如:

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?

关于c# - WebAPI,将一个或集合对象发布到同一操作而不更改消息正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772983/

相关文章:

c# - 如何将 DistinctRootEntityResultTransformer 应用于 NHibernate 中的所有查询

c# - 如何在 MVP 中设置控件状态

c# - 浏览器关闭时停止调试 Visual Studio 2013

c# - 通过 Entity Framework 提高 SQL Server 中的搜索性能

javascript - 混合 Javascript 和 Razor 代码

c# - 如何仅在需要时提升权限?

c# - 向 Windows 服务发送字符串命令或字节? (运行时)

asp.net - 如何在不同机器上的IIS和SQL Server之间建立信任?

c# - cookie 在 c# 中不会过期

c# - 为什么不使用 Entity Framework 创建代码优先表?