我有以下情况
[Route("api/[controller]")]
[ApiController]
public class FooController: ControllerBase
{
[HttpGet("{id}", Name = "GetFoo")]
public ActionResult<FooBindModel> Get([FromRoute]Guid id)
{
// ...
}
}
[Route("api/[controller]")]
[ApiController]
public class Foo2Controller: ControllerBase
{
[HttpPost("/api/Foo2/Create")]
public ActionResult<GetFooBindModel> Create([FromBody]PostFooBindModel postBindModel)
{
//...
return CreatedAtRoute("GetFoo", new { id = getBindModel.Id }, getBindModel);
}
}
PS:getBindModel
是类型GetFooBindModel
的实例。我正在
InvalidOperationException:没有路由与提供的值匹配。
我也尝试过更改行
return CreatedAtRoute("GetFoo", new { id = getBindModel.Id }, getBindModel);
到
return CreatedAtRoute("api/Foo/GetFoo", new { id = getBindModel.Id }, getBindModel);
但仍然是相同的错误。
答案 0 :(得分:6)
在 FooController 中将您的操作方法(Get)的名称与HttpGet Attribute上的路由名称进行匹配。您可以在c#中使用nameof关键字:
[HttpGet("{id}", Name = nameof(Get))]
public ActionResult<FooBindModel> Get([FromRoute]Guid id)
{
...
}
,也可以使用 nameof 代替硬编码的路由名称:
return CreatedAtRoute(nameof(FooController.Get), new { id = getBindModel.Id }, getBindModel);
,然后重试;
答案 1 :(得分:0)
以下代码对我有用:
return CreatedAtRoute(
"GetFoo",
new { controller = "Foo", id = getBindModel.Id},
getBindModel);