多个发布类型asp.net 5 MVC 6 API

The*_*man 4 c# asp.net asp.net-mvc asp.net-core-mvc asp.net-core

我可以将[F​​romBody]用于单一类型,但有没有办法使用多个?

从搜索和阅读开始我没有办法,但我不知道MVC 6中是否添加了一种方法.

如果没有,哪里最好以自定义方式开始.

我应该在模型绑定之前研究和寻找最佳方法或地点,以便我可以包含我自己的方法?

Bri*_*ins 6

最好的方法是创建一个复合包装器:

public class Wrapper
{
   public ModelA A { get; set; }

   public ModelB B { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

将Wrapper放入参数列表并标记[FromBody].您不能多次使用该属性,因为假定正文的所有内容都与参数类型匹配.


McG*_*V10 5

如果您可以在调用者和服务器之间轻松共享模型,那么复合包装器方法很棒,但更通用的方法是使用JObject:

using Newtonsoft.Json.Linq;  // this gets you to JObject

[Route("svc/[controller]/[action]")]
public class AccountController : Controller
{
  [HttpPost("{accountid}")]
  public IActionResult UpdateAccount(int accountid, [FromBody]JObject payload)
  {
    var loginToken = payload["logintoken"].ToObject<LoginToken>();
    var newAccount = payload["account"].ToObject<Account>();
    // perform update
    return this.Ok("success");
  }
}
Run Code Online (Sandbox Code Playgroud)

您也可以选择一个Tuple可以为您提供参数列表中指定的具体类型.如果您的客户端始终是.NET应用程序(特别是.NET 4.0或更高版本),那么这将是很好的,但是如果您试图来自AJAX或类似的东西,您可能想要编写一个帮助程序库以获得正确的有线格式.