System.InvalidOperationException Ошибка при вызове веб-API из приложения React - PullRequest
0 голосов
/ 18 мая 2018

У меня есть эти два контроллера Web Api, в настоящее время я вызываю метод контроллера, GetSingle из приложения реакции

    public IHttpActionResult GetAllData()
    {
        var modelitems = new List<TestModel>();

        var items = AWEntity.GetProducts();
        var i = 0;

        foreach (var item in items)
        {
            var model = new TestModel
            {
                Id = item.ProductId,
                TestName = item.Name,
                TestMessage = "My Message" + i,
                ReorderPoint = item.ReorderPoint
            };

            modelitems.Add(model);

            i++;
        }

        return Ok(modelitems);
    }

    public IHttpActionResult GetSingle()
    {
        var item = AWEntity.GetProduct();

        var model = new TestModel
        {
            Id = item.ProductId,
            TestName = item.Name,
            TestMessage = "My Message" + 1,
            ReorderPoint = item.ReorderPoint
        };

        return Ok(model);
    }

реаги fetch выглядит так

    fetch('http://localhost:51620/api/TestApi/GetSingle')
    .then(result => result.json())
    .then(result => {
      this.setState({
        items : result
      }
    )
  })

и моя конфигурация маршрута WebApi выглядит так:

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

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

Итак, моя проблема в том, что всякий раз, когда я вызываю метод GetSingle, я получаю эту ошибку в консоли

    {
  "message": "An error has occurred.",
  "exceptionMessage": "Multiple actions were found that match the request: \r\nGetData on type WebAPIComponent.Controllers.TestApiController\r\nGetSingle on type WebAPIComponent.Controllers.TestApiController",
  "exceptionType": "System.InvalidOperationException",
  "stackTrace": "   at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n   at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n   at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}

Любая идея, в чем может быть причина, я попытался добавить другой маршрут по умолчанию, который включает в себя параметр действия, но это, кажется, не работает, и если возможно, я бы хотел избежать использования пользовательского атрибута маршрута

Спасибо большое

1 Ответ

0 голосов
/ 18 мая 2018

Ах, я разобрался с ответом, конфиг маршрута был настроен неправильно, конфиг с действием должен стоять первым как приоритет

...