Многократное получение веб-API - PullRequest
0 голосов
/ 26 августа 2018

У меня есть пара методов get в моем классе веб-API. Конфигурация маршрута, как показано ниже;

 config.Routes.MapHttpRoute(
                name: "CustomApi",
                routeTemplate: "api/test/{action}/{id}",
                defaults: new { controller = "item", action="testBring", id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

Класс контроллера следующий:

public class ItemController : ApiController
    {
        // GET: api/Item
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        [ActionName("testBring")]
        [HttpGet]
        public string testBring()
        {
            return "value";
        }

        // GET: api/Item/5
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/Item
        [HttpPost]
        public void CreateItem([FromBody]string value)
        {
        }

        // PUT: api/Item/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE: api/Item/5
        public void Delete(int id)
        {
        }
    }

Когда я пытаюсь вызвать / api / test , вызывается метод testBring . Но когда я звоню / api / Item , я получаю сообщение об ошибке: найдено несколько действий, соответствующих запросу ... Почему это так?

1 Ответ

0 голосов
/ 26 августа 2018

/api/test точно соответствует первому шаблону маршрута api/test/{action}/{id} из-за включенных параметров по умолчанию, которые позволяют ему вызывать определенное действие.

Однако /api/Item сопоставляется со вторым шаблоном маршрута api/{controller}/{id}, и таблица маршрутов не может определить, какое действие вы хотели, так как существует несколько HttpGet действий (то есть Get() и testBring()), которые соответствуют запрашиваемый путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...