我正在使用.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]")]
欢呼
保罗
答案 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)