REST API 控制器名称已丢弃(忽略)
REST API controller name discarded (ignored)
在 REST API 项目 dotnet Core 5.0 中,我有两个控制器:MyAController 和 MyBController,分别位于 类。它们派生自 MediatorApiController,后者派生自 ControllerBase。除了它们管理的实体 (CRUD) 之外,它们基本上是相同的。当我键入 https://localhost:5001/api 时,它会转到 MyAController 中的 [HttpGet("/{lang}")] 相应方法并显示对象 {lang}='api' ?? .
如果我输入 https://localhost:5001/api/MyA/1 或 https://localhost:5001/api/MyB/1 我收到一个错误
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: 请求匹配多个端点
MyAController.Get
MyBController.Get ???
有人可以帮忙吗?
我确实使用了 edi.routedebugger,但它没有达到目的(错误 500),如果我显示控制器,它们都会正确显示。
public class AController : MediatorApiController
public class BController : MediatorApiController
public class MediatorApiController : ControllerBase
[Route("api/[controller]")]
[ApiController]
public class MyAController : MediatorApiController
{
[HttpGet("/{lang}")]
public async Task<ActionResult<List<AlimentDto>>> GetAll(string lang)
{
return await Mediator.Send(new GetAllAlimentsQuery(lang));
}
[HttpGet("/{id}/{lang}")]
public async Task<ActionResult<AlimentDto>> Get(int id, string lang)
{
return await Mediator.Send(new GetAlimentByIdQuery { Id = id, Lang = lang });
}
}
startup.cs 文件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwaggerUi3();
app.UseRouteDebugger();
}
//app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseOpenApi();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
尝试把“/”去掉,改成
[HttpGet("{lang}")]
public async Task<ActionResult<List<AlimentDto>>> GetAll(string lang)
对于 lang=en 你的 url 应该是
../api/MyAControlle/en
但我更喜欢并推荐使用完整的路由属性
[Route("~/api/MyAControlle/GetAll/{lang}]
public async Task<ActionResult<List<AlimentDto>>> GetAll(string lang)
在 REST API 项目 dotnet Core 5.0 中,我有两个控制器:MyAController 和 MyBController,分别位于 类。它们派生自 MediatorApiController,后者派生自 ControllerBase。除了它们管理的实体 (CRUD) 之外,它们基本上是相同的。当我键入 https://localhost:5001/api 时,它会转到 MyAController 中的 [HttpGet("/{lang}")] 相应方法并显示对象 {lang}='api' ?? .
如果我输入 https://localhost:5001/api/MyA/1 或 https://localhost:5001/api/MyB/1 我收到一个错误 Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException: 请求匹配多个端点 MyAController.Get MyBController.Get ???
有人可以帮忙吗? 我确实使用了 edi.routedebugger,但它没有达到目的(错误 500),如果我显示控制器,它们都会正确显示。
public class AController : MediatorApiController
public class BController : MediatorApiController
public class MediatorApiController : ControllerBase
[Route("api/[controller]")]
[ApiController]
public class MyAController : MediatorApiController
{
[HttpGet("/{lang}")]
public async Task<ActionResult<List<AlimentDto>>> GetAll(string lang)
{
return await Mediator.Send(new GetAllAlimentsQuery(lang));
}
[HttpGet("/{id}/{lang}")]
public async Task<ActionResult<AlimentDto>> Get(int id, string lang)
{
return await Mediator.Send(new GetAlimentByIdQuery { Id = id, Lang = lang });
}
}
startup.cs 文件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwaggerUi3();
app.UseRouteDebugger();
}
//app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseOpenApi();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
尝试把“/”去掉,改成
[HttpGet("{lang}")]
public async Task<ActionResult<List<AlimentDto>>> GetAll(string lang)
对于 lang=en 你的 url 应该是
../api/MyAControlle/en
但我更喜欢并推荐使用完整的路由属性
[Route("~/api/MyAControlle/GetAll/{lang}]
public async Task<ActionResult<List<AlimentDto>>> GetAll(string lang)