CreatedAtRoute找不到匹配的路由值

时间:2019-10-08 12:05:25

标签: .net-core .net-core-3.0 asp.net-core-3.0

.NET Core教程遇到问题。它是用.NET Core 2.2编写的,但是我想使用当前版本3.0。

这也是我在设置和教程中可以找到的唯一区别。

问题如下: 我有一个带有CreatedAtRoute调用的HttpPost路由,但是找不到它必须的路由。 通过邮递员进行测试时,我总是会收到此错误:

System.InvalidOperationException: No route matches the supplied values.
   at Microsoft.AspNetCore.Mvc.CreatedAtRouteResult.OnFormatting(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor.ExecuteAsyncCore(ActionContext context, ObjectResult result, Type objectType, Object value)
...

但是,当通过调试器检查时,我发现一切正常,请对此行加以说明。因此,我要上传的新照片也已添加到Cloudinary并添加到数据库中。

我打的电话是:

return CreatedAtRoute("GetPhoto", new {id = photo.Id}, photoToReturn);

这应该在同一文件中找到此路由:

[HttpGet("{id}", Name = "GetPhoto")]
public async Task<IActionResult> GetPhoto(int id)
{

在这里我想念什么吗?我还没有找到任何有用的答案...

编辑public repo available,在克隆并运行此代码时,我仍然遇到相同的错误...

编辑2 :同时,本教程涵盖了更多主题,而我发现了这一点: CreatedAtRoute使用以下命令调用另一个Controller:

return CreatedAtRoute("GetUser",new {Controller="Users",id=createdUser.Id}, userToReturn);

可以正常工作,当尝试在同一控制器内调用路由时,它也会失败,并且与此同时:

return CreatedAtRoute(nameof(GetMessage), new {Controller = "Messages", id = message.Id}, message);

要在同一控制器中调用此路由:

[HttpGet("{id}", Name = "GetMessage")]
public async Task<IActionResult> GetMessage(int userId, int id)

1 个答案:

答案 0 :(得分:1)

代替 [HttpGet("{id}", Name = "GetPhoto")] 采用: [HttpGet("/{id}", Name = "GetPhoto")]

我遇到了同样的错误,我通过在ID之前加上'/'来解决了这个问题。