【发布时间】: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)
【问题讨论】:
-
你在使用
UseRouting和UseEndpoints吗?如果是这样,在您的 3.0 版本中对UseEndpoints的调用是什么样的? -
是的,我是。目前它是:
app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); });,但它也不适用于endpoints.MapController()(我之前在其他地方找到的解决方案) -
你用
MapDefaultControllerRoute和MapControllers都试过了吗? -
是的,结果相同
-
我试图重现这个,但它对我来说没有问题。
标签: .net-core .net-core-3.0 asp.net-core-3.0