我收到错误,因为我为 Get 语句添加了 FromQuery 参数以返回列表,而我已经有一个使用路由获取详细信息的 Get 语句。有人遇到过标准 Get 中的路由(详细信息)与附加参数的问题吗?
我有一个API来获取有关一种情况的详细信息:
[HttpGet("{id}")]
public async Task<ActionResult<CaseDTO>> Get(string guid)
{
...
}
我有一个 api 来获取案例列表:
[HttpGet]
public async Task<ActionResult<CaseListDTO>> Get()
{
...
}
一切都很好,但我想向列表函数添加一个参数,这样我就可以在必要时提供返回其他字段的机会:
[HttpGet]
public async Task<ActionResult<CaseListDTO>> Get([FromQuery]string mode = "")
{
...
}
还有其他人遇到过这种情况吗?有处理这种情况的最佳实践吗?
更新
我还没有完全解决这个问题,但我确实得到了一部分。
这就是我所做的:
[Route("{caseId:int}")]
public async Task<ActionResult<OutboundCaseDTO>> Get(int caseId)
我在控制器/类级别有这个:
[Route("api/v{version:apiVersion}/[controller]")]
当我遇到 RoutePrefixAttribute 的问题时,这篇 so post 有所帮助。
我想要3个Get方法:
现在我有 1、3 和 4。
完成提供的文档有帮助,但是有一个对 RoutePrefix 的引用让我偏离了方向,但我希望随着事情的发展我需要回到它。
更多发现
我在运行时遇到错误:
约束引用“字符串”无法解析为类型。 注册约束类型 'Microsoft.AspNetCore.Routing.RouteOptions.ConstraintMap'
这让我找到了this,我开始研究
Rout
与HttpGet
,并发现this很有帮助。
你需要的是路由。因为您有两个具有相同名称(但签名不同)的方法,所以应用程序路由无法确定应该调用哪个 Get 。您可以通过指定路由来克服这个问题。这样,根据您传递的 URL 类型(即您请求的资源类型),它将方法转发到适当的 Get 方法。
在此处了解有关路由的更多信息 - https://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api- 2
的潜在重复该案例可能是通过恶意nuget包进行攻击。对于这种意外的错误泛滥仍然没有答案。我很高兴看到任何经历过此类错误并采取解决方案的人。