【问题标题】:CreatedAtRoute can't find route matching supplied valuesCreatedAtRoute 找不到与提供的值匹配的路由
【发布时间】:2020-01-30 14:01:21
【问题描述】:

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

这也是我的设置与教程设置的唯一区别。

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

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 调用另一个控制器:

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)

【问题讨论】:

  • 你在使用UseRoutingUseEndpoints吗?如果是这样,在您的 3.0 版本中对 UseEndpoints 的调用是什么样的?
  • 是的,我是。目前它是:app.UseEndpoints(endpoints =&gt; { endpoints.MapDefaultControllerRoute(); });,但它也不适用于endpoints.MapController()(我之前在其他地方找到的解决方案)
  • 你用MapDefaultControllerRoute MapControllers都试过了吗?
  • 是的,结果相同
  • 我试图重现这个,但它对我来说没有问题。

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


【解决方案1】:

而不是 [HttpGet("{id}", Name = "GetPhoto")] 利用: [HttpGet("/{id}", Name = "GetPhoto")]

我遇到了同样的错误,我通过在 id 之前添加“/”来解决它。

【讨论】:

    猜你喜欢
    • 2018-04-28
    • 2019-02-03
    • 1970-01-01
    • 2020-02-20
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多