尝试将 FormQuery 添加到 Get 时,“类型‘CaseController’已经定义了一个名为‘Get’的具有相同参数类型的成员”

问题描述 投票:0回答:2

我收到错误,因为我为 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. 列出所有案例
  2. 列出具有附加属性的案例
  3. 使用指南获取案例详细信息
  4. 使用 ID 获取案例详细信息

现在我有 1、3 和 4。

完成提供的文档有帮助,但是有一个对 RoutePrefix 的引用让我偏离了方向,但我希望随着事情的发展我需要回到它。

更多发现

我在运行时遇到错误:

约束引用“字符串”无法解析为类型。 注册约束类型 'Microsoft.AspNetCore.Routing.RouteOptions.ConstraintMap'

这让我找到了this,我开始研究

Rout
HttpGet
,并发现this很有帮助。

这个路由文档基于这篇文章确实很有帮助。

asp.net-web-api
2个回答
1
投票

你需要的是路由。因为您有两个具有相同名称(但签名不同)的方法,所以应用程序路由无法确定应该调用哪个 Get 。您可以通过指定路由来克服这个问题。这样,根据您传递的 URL 类型(即您请求的资源类型),它将方法转发到适当的 Get 方法。

在此处了解有关路由的更多信息 - https://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api- 2

这可能是 - ASP.NET Web API 中具有多个 GET 方法的单个控制器

的潜在重复

0
投票

该案例可能是通过恶意nuget包进行攻击。对于这种意外的错误泛滥仍然没有答案。我很高兴看到任何经历过此类错误并采取解决方案的人。

© www.soinside.com 2019 - 2024. All rights reserved.