有没有办法使框架根据请求正文引用正确的方法?(一个项目与多个项目)



我想允许客户端发送仅一个项目和一个项目集合的帖子请求,而无需更改方法路由。

例如:

发布此正文:

{
"foo": "some value"
}       

应达到此方法:

[HttpPost]        
public async Task<IActionResult> Post([FromBody] MyPostRequest request = null)

发布此正文:

[
{
"foo": "some value"
},
{
"foo": "some value"
}   
]

应达到此方法:

[HttpPost]
public async Task<IActionResult> Post([FromBody] IEnumerable<MyPostRequest> requests = null)

但请求失败,并显示:

Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: 请求匹配多个终结点。

在这个问题之后,我能够看到路由约束是最佳选择,但问题是关于基元类型作为参数,而路由约束仅支持基元类型。

有没有办法让框架理解根据请求的正文(一个项目与多个项目(引用正确的签名? 更改方法名称是最后的手段。

如果没有一些认真的框架修改,就没有办法仅靠路由来完成这一点;正如你所发现的,最接近的内置功能,路由约束,只适用于基元。如果您绝对需要此功能,我会在评论中使用 Nkosi 的建议:在单个项目到达控制器方法之前以编程方式将单个项目添加到IEnumerable中。

为了避免混淆端点正在做什么,我将完全避免这种情况:要么需要一个数组,要么为该操作创建一个单独的端点。每个 REST 端点都应引用一种类型的资源,即使端点引用单个模型,从技术上讲,您正在处理两种类型的资源:集合和对象

相关内容

  • 没有找到相关文章