当前位置: 首页 > 知识库问答 >
问题:

避免ASP.NET内核中的“请求匹配多个操作导致歧义”错误

戚勇
2023-03-14

我在努力做一些简单而琐碎的事情--或者至少我认为。

我试图编写一个基类,可以由我旋转的每个微服务项目继承。这个基类的目的是测试从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) { }
}

共有1个答案

卫博雅
2023-03-14

使你的基本控制器抽象。否则,它们作为可以路由到的可能控制器参与路由。尽管我有点惊讶,老实说,基于控制器名称约定的路由仍然适用于以ControllerBase结尾的类,而不是以controller结尾的类,但ASP.NET核心似乎将它们都视为命名为DevTest,因此不明确。

您也可以将基本控制器重命名为baseDevtestController(即在“controller”之前使用“base”),这样就可以将名称devtestbaseDevtest,从而消除了模糊性。然而,还是把它抽象起来更好,因为无论如何它都应该是抽象的。您不希望有人能够直接导航到您的基本控制器。

 类似资料:
  • 我一直得到这个错误,当我尝试有2"获取"方法 找到多个与请求匹配的操作:webapi 我一直在寻找其他类似的问题,但我不明白。 我有两个不同的名称,并使用“HttpGet”属性

  • 我有以下数据帧: 尝试使用spark-sql进行连接,如下所示 给出错误为: 我在这里做错了什么,如何修复?

  • 我正在尝试使用Python登录一个网站并从多个网页收集信息,我收到以下错误: 我用了,它可以工作,但它似乎不明智且不可靠,还有其他方法可以避免这个错误吗? 这是我的代码:

  • 问题内容: 我正在构建一个Web应用程序,该应用程序需要同时使用jquery ajax简短形式进行大约28000个数据库调用。 它可以正常处理大约6000个调用,但随后浏览器在浏览器控制台中向我提供了大约20000以下错误(每个调用一个): POST(我的数据库调用)网:: ERR_INSUFFICIENT_RESOURCES 有谁知道如何解决这个问题?也许要创建一个缓冲区或什么? 谢谢! 编辑1

  • 问题内容: 我正在尝试调试我写的一个简单REST库时遇到的非常异常的错误。 我使用标准的net / http包发出Get,Post,Put,Delete请求,但是当我连续发出多个请求时,我的测试有时会失败。我的测试看起来像这样: 我正在这样请求: 有时它可以工作,但是大多数时候我会出现1或2个失败: 当我提出多个请求时,就会发生失败。如果我注释掉除PUT请求之外的所有内容,则测试将始终通过。一旦包

  • 我有一个jersey服务器的例子,它适用于XML,但不适用于JSON。 如果我将此xml请求作为发送到服务器,则一切正常, 作为) 我在utilities-online.info将其翻译为JSON,并将其作为发送到相同的URL,具有相同的参数,但收到错误“400错误请求” 环境: Tomcat 7 球衣2.17 我尝试过的: 将添加到init-参数 启用init-参数为 添加了依赖项//