挥舞着“路径'../api/'上的方法'获取'被多次注册”错误

问题描述

我在基于.NET Core的Angular应用中使用OpenAPI / Swagger,并且在使用NSwag Studio作为TypeScript生成前端代码时遇到“多次注册路径'../api/'上的方法'获取'”错误。据我在Github页面等上看到的,问题与使用相同的路由有关,即使API或Controller中的方法名称与下面显示的也不一样:

[HttpGet]
public async Task<IEnumerable<DemoDto>> Get()
{
    return await Mediator.Send(new GetDemoQuery()); // GetDemoQuery()
}

[HttpGet("{id}")]
public async Task<DemoDto> GetById(int id)
{
    return await Mediator.Send(new GetGetDemoByIdQuery { Id = id }); // GetGetDemoByIdQuery()
}

那么,是否有解决此问题的修补程序?我已经使用其他名称作为方法名称,但是遇到了这个问题。

更新: 这是我在Startup.cs中的路由定义(我以前使用.NET MVC,并且我认为.NET Core的路由定义是在Startup中设置的。 cs类似于ASP.NET Core - Routing上的内容。但是在我的应用中,Startuo.cs中唯一的路由设置如下:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",pattern: "{controller}/{action=Index}/{id?}");
        endpoints.MapRazorPages();
});

有什么需要额外申请的吗? 所以,有什么

解决方法

我通过添加[Route("Demo/Get/{id?}")]注释解决了该问题。我希望用法是正确的,并且没有一种更短或更聪明的用法。

[HttpGet]
[Route("mycontroller")]
public async Task<IEnumerable<DemoDto>> Get()
{
    return await Mediator.Send(new GetDemoQuery()); // GetDemoQuery()
}

[HttpGet("{id}")]
[Route("mycontroller/{id?}")]
public async Task<DemoDto> GetById(int id)
{
    return await Mediator.Send(new GetGetDemoByIdQuery { Id = id }); // GetGetDemoByIdQuery()
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...