gpt4 book ai didi

c# - 避免 ASP.Net Core 中的 "Request matched multiple actions resulting in ambiguity"错误

转载 作者:太空狗 更新时间:2023-10-29 22:56:51 26 4
gpt4 key购买 nike

我正在尝试做一些简单微不足道的事情 - 或者至少我认为是这样。

我正在尝试编写一个基类,它可以被我启动的每个微服务项目继承。这个基类的目的是测试从 HTTP 一直到 SQL 的连接性。它在 PROD 中未启用。

这是(更简单的)基类之一:

public class DevTestControllerBase: ApiControllerBase
{
public DevTestControllerBase(IHostingEnvironment env, IConfiguration configuration = null, IMediator mediator = null) : base(env, configuration, mediator)
{
}


[HttpGet]
public IActionResult Get()
{
var response = Mediator.Send(new QueryGet());
return Ok(response.Result);
}

[HttpGet("{id}", Name = "Get")]
public IActionResult Get(Guid id)
{
var response = Mediator.Send(new QueryGetById(id));
return Ok(response.Result);
}

[HttpPost]
public async Task<IActionResult> Post([FromBody]DevTestModelBinding value)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);

var response = await Mediator.Send(new CommandPost(value));
return Created("Get", new { id = response });
}

[HttpPut("{id}")]
public IActionResult Put(Guid id, [FromBody]DevTestModelBinding value)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);

Mediator.Send(new CommandPut(id, value));
return Ok();
}

[HttpDelete("{id}")]
public IActionResult Delete(Guid id)
{
Mediator.Send(new CommandDelete(id));
return Ok();
}
}

我希望将它用作:

[Produces("application/json")]
[Route("api/DevTest")]
public class DevTestController : DevTestControllerBase
{
public DevTestController(IHostingEnvironment env, IConfiguration configuration, IMediator mediator) : base(env, configuration, mediator) { }
}

不幸的是,它产生了这个错误:

AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

MyNamespace.Providers.WebApi.Features.DevTest.DevTestController.Get (MyNamespace.Providers.WebApi) MyNamespace.Infrastructure.Web.Controllers.DevTestControllerBase.Get (MyNamespace.Infrastructure.Web)

因为我想使用 Swagger,所以在尝试访问 Swagger 端点时我也遇到了这个错误:

An unhandled exception has occurred while executing the request System.NotSupportedException: Ambiguous HTTP method for action - MyNamespace.Providers.WebApi.Features.DevTest.DevTestController.Get (MyNamespace.Providers.WebApi). Actions require an explicit HttpMethod binding for Swagger 2.0

最佳答案

让你的基础 Controller 抽象化。否则,它们将作为可以路由到的可能 Controller 参与路由。虽然我有点惊讶,老实说,基于 Controller 名称约定的路由仍然适用于以 ControllerBase 结尾的类,而不仅仅是 Controller,看起来 ASP .NET Core 将它们视为名为 DevTest,因此不明确。

您也可以将基本 Controller 重命名为类似 BaseDevTestController 的名称(即在“Controller”之前使用“Base”),这样就可以生成名称DevTestBaseDevTest,消除了歧义。但是,将其抽象化仍然是一个更好的主意,无论如何都应该如此。您不希望有人实际上能够直接导航到您的基本 Controller 。

关于c# - 避免 ASP.Net Core 中的 "Request matched multiple actions resulting in ambiguity"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49035516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com