C# 在ASP.NET核心API中将单个对象和对象集合发布到同一端点?
我正在寻找一种方法,使ASP.NET Core 2.0中的同一终结点既可以接受单个终结点,也可以接受集合终结点,但不知道如何使其工作:C# 在ASP.NET核心API中将单个对象和对象集合发布到同一端点?,c#,asp.net,routing,C#,Asp.net,Routing,我正在寻找一种方法,使ASP.NET Core 2.0中的同一终结点既可以接受单个终结点,也可以接受集合终结点,但不知道如何使其工作: [HttpPost] [Route("")] public ActionResult<string> Post([FromBody] SampleModel model) { return "Single"; } [HttpPost] [Route("")] publi
[HttpPost]
[Route("")]
public ActionResult<string> Post([FromBody] SampleModel model)
{
return "Single";
}
[HttpPost]
[Route("")]
public ActionResult<string> Post([FromBody] SampleModel[] models)
{
return "Multiple";
}
以及
[
{
"name": "Multi1"
},
{
"name": "Multi2"
}
]
到同一个端点-api/sample/
使用自定义模型活页夹等是否可以实现这一点
这似乎是API支持的一件好事。您可以声明一个从主体获取JToken的操作,然后根据您可以反序列化令牌的类型调用所需的方法
private ActionResult<string> Single(SampleModel model)
{
return "Single";
}
private ActionResult<string> Multiple(SampleModel[] models)
{
return "Multiple";
}
private bool TryToObject<T>(JToken token, out T value)
{
try
{
value = token.ToObject<T>();
return true;
}
catch (Exception) { }
value = default(T);
return false;
}
[HttpPost]
[Route("")]
public ActionResult<string> Post([FromBody] JToken token)
{
if (TryToObject(token, out SampleModel[] models))
return Multiple(models);
else if (TryToObject(token, out SampleModel model))
return Single(model);
else
return BadRequest();
}
现在尝试寻找JObject的挑战是识别对象或集合,所以在这种情况下,如果你的对象转换成功,那么它是平均对象,否则它是collectino。@Parwej是的,我将其视为一种解决方案,但你失去了所有建模的优点。谢谢!JToken是解决问题的关键!:D
private ActionResult<string> Single(SampleModel model)
{
return "Single";
}
private ActionResult<string> Multiple(SampleModel[] models)
{
return "Multiple";
}
private bool TryToObject<T>(JToken token, out T value)
{
try
{
value = token.ToObject<T>();
return true;
}
catch (Exception) { }
value = default(T);
return false;
}
[HttpPost]
[Route("")]
public ActionResult<string> Post([FromBody] JToken token)
{
if (TryToObject(token, out SampleModel[] models))
return Multiple(models);
else if (TryToObject(token, out SampleModel model))
return Single(model);
else
return BadRequest();
}