asp.net-core-webapi - CreatedAtAction 在带有 Api 版本控制的 Asp.Ner Core 3.1 中返回“没有路由与提供的值匹配”500 错误
问题描述
我在带有 Api 版本控制的 Asp.Net Core 3.1 中有一个 Web API 项目,设置如下:
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
public abstract class BaseApiController : ControllerBase
{
...
}
我正在测试的控制器:
public class RegistrationController : BaseApiController
{
[HttpGet]
[Route("{id}")]
public async Task<ActionResult<RegistrationDTO>> GetRegistration(int id)
{
...
}
[HttpPost]
public async Task<IActionResult> Create(RegistrationCreateDTO item, ApiVersion apiVersion)
{
...
return CreatedAtAction(nameof(GetRegistration), new { id = itemId, version = $"{apiVersion.MajorVersion.Value}" }, itemId);
}
}
由于某种原因,除非我删除 [Route{"id"}] 并将 [HttpGet] 更改为 [HttpGet{"id"}],否则这不起作用。知道是什么导致了这种行为吗?
请注意,我在设置中没有任何特定的路线,只是一个简单的app.UseHttpsRedirection();
和app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
解决方案
这是一个演示:Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddApiVersioning(o =>
{
o.ReportApiVersions = true;
o.AssumeDefaultVersionWhenUnspecified = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
BaseApiController:
[ApiController]
[Route("api/v{version:apiVersion}/[controller]")]
public class BaseApiController : ControllerBase
{
}
注册控制器:
public class RegistrationController : BaseApiController
{
[HttpGet]
[Route("{id}")]
public JsonResult GetRegistration(int id)
{
return new JsonResult("aa");
}
}
推荐阅读
- angular - 使用Angular在Ionic 5中路由用户时如何刷新页面
- google-chrome - 我是否需要先发布 chrome 扩展才能测试许可证?
- python - 如何在 python unittest 中模拟未在本地安装的库?
- postgresql - 安装后无法连接到 PostgreSQL 12 服务器
- java - 更新 Kotlin 后主要活动未启动
- button - Xamarin Forms Transalted 按钮单击
- common-lisp - Stack Overflow on lisp 更改列表中的 2 个元素
- google-cloud-dataflow - 在流式传输管道中使用谷歌云发布/订阅服务有什么好处
- html - Angular Material Stepper:设置活动页眉的样式
- c# - 如何使用 C# 可靠地读取串行端口的 CTS 和 DSR 状态