Как правильно настроить маршруты для контроллера webapi, чтобы идентификатор выбирался как часть url, а не строка запроса - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема с получением URL-адресов для правильного разрешения моих контроллеров путем получения идентификатора из URL-адреса, а не параметра строки запроса. У меня есть. net проект webapi, настроенный со следующей структурой папок.

Root
  Controllers
    v1
      Partner
        CompaniesController
      PersonController
      QuoteController

Так что, как вы можете видеть, CompaniesController находится в папке Partner, а остальные контроллеры - в папке v1. Я также использую RoutePrefix на моем CompaniesController, например ...

[EnableCors("*", "*", "*")]
[RoutePrefix("api/v1/partner/companies")]
public class CompaniesController : BaseApiController{

   [Route("contact")]
   [HttpPost]
   public IHttpActionResult Contact(string id)
   {
   }
}

Проблема, с которой я сталкиваюсь, заключается в том, что следующий URL возвращает 404.

https://localhost:44322/api/v1/partner/companies/contact/9da093ef-57a5-4da0-bd0e-5ac97cf304e2

Но следующий URL-адрес работает нормально и вызывает метод find

https://localhost:44322/api/v1/partner/companies/contact?id=9da093ef-57a5-4da0-bd0e-5ac97cf304e2

Я подумал, что это может быть мой файл routeconfig, поэтому я добавил его к нему, но все равно не работает, как ожидалось.

routes.MapRoute(
    name: "Partner",
    url: "api/v1/partner/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Есть идеи, что мне нужно изменить, чтобы это работало с идентификатором как частью URL, а не параметром строки запроса?

1 Ответ

0 голосов
/ 22 апреля 2020

На случай, если кто-то еще столкнется с этим, я решил это, изменив атрибут метода в методе. Поэтому то, что раньше выглядело как [Маршрут («контакт»)], теперь называется [Маршрут («контакт / {идентификатор}»)].

...