Web Api Controller не разрешает действие - PullRequest
0 голосов
/ 26 мая 2019

Я использую .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" };
    }
}

Я новичок в чистых веб-контроллерах API.

Я не понимаю, почему, когда я публикую json на

http://localhost:51285/api/cars/search

Я получаю метод 405, не разрешенный?

У меня обычно есть маршрут

[Route("api/[controller]/action")]

Это работает (как только я удаляю маршрут из атрибутов метода), но это не было значением по умолчанию, предоставленным в шаблоне

Может ли кто-нибудь дать мне знать, что мне не хватает?

Я нарушаю соглашение, меняя на

[Route("api/[controller]/[action]")]

Приветствия

Пол

1 Ответ

0 голосов
/ 26 мая 2019

Поскольку вы не используете корневую косую черту в своем действии "/", промежуточное ПО 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)
...