问题描述
我在基于.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()
}