Web Api控制器无法解决操作

时间:2019-05-25 21:38:42

标签: asp.net-web-api asp.net-core-mvc

我正在使用.NET Core 2.2,并且下面有控制器

[Route("api/[controller]")]
[ApiController]
public class CarsController : ControllerBase
{
    [HttpPost]
    [Route("api/cars/search")]
    [ActionName("search")]
    public ActionResult<IEnumerable<string>> SearchForCar([FromBody] SearchCriteria searchCriteria)
    {

        return new string[] { "value1", "value2" };
    }
}

我是纯Web api控制器的新手。

我对为什么将json发布到

感到困惑
http://localhost:51285/api/cars/search

我不能使用405方法吗?

我通常会有

的路线
[Route("api/[controller]/action")]

这确实可行(一旦我从方法属性中删除路由),但这不是模板中提供的默认值

有人能让我知道我在想什么吗?

我通过更改为

来违反约定吗?
[Route("api/[controller]/[action]")]

欢呼

保罗

1 个答案:

答案 0 :(得分:0)

由于您未在动作“ /”中使用根斜杠,因此MVC中间件将搜索连接控制器和动作的路由,应该像这样

[Route("/api/[controller]/[action]")] // Check the root slash as first character
public ActionResult<IEnumerable<string>> SearchForCar([FromBody]
SearchCriteria searchCriteria)

或者这样

[Route("api/[controller]/[action]")] [ApiController] public class
CarsController : ControllerBase

在控制器中:

[Route("api/[controller]")] [ApiController] public class
CarsController : ControllerBase

实际情况:

[Route("search")] // [action] Takes the method name
public <ActionResult<IEnumerable<string>>
SearchForCar([FromBody] SearchCriteria searchCriteria)
相关问题