codegeekalpha Ответов: 1

Web API 2 не извлекает данные из базы данных


У меня есть контроллер api в моем проекте, который должен извлекать данные из базы данных на основе ISBN

Когда я получаю ошибку

":"No HTTP resource was found that matches the request URI 'http://localhost:2280/api/ServiceA/'.","MessageDetail":"No action was found on the controller 'ServiceA' that matches the request."}


Что я уже пробовал:

Вот класс контроллера, который должен фильтровать данные на основе isbn в url-адресе. но вместо этого он показывает, что ни один http-ресурс не соответствует UrI
       [Route("{isbn}")]
       public Book Get(string isbn)
          {

            using (AppDbContext db = new AppDbContext())

            {

                var query = from b in db.Books

                            where b.ISBN == isbn && b.Source == "Book Store 1"

                            select b;

                return query.SingleOrDefault();

            }

        }
    }
}


Вот настольная книга

public class book
    {
        [Table("Books")]
        public class Book
        {
            public int Id { get; set; }
            public string ISBN { get; set; }
            public string Title { get; set; }
            public string Publisher { get; set; }
            public string Author { get; set; }
            public decimal Price { get; set; }
            public string Source { get; set; }
            public string PurchaseUrl { get; set; }
        }
    }

Garth J Lancaster

где находится часть этого маршрута "ServiceA"

'http://localhost:2280/api/ServiceA/'

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

'http://localhost:2280/api/isbn/'

Я не говорю "вы ошиблись", я много сделал с REST, но не с WEB API 2 .. так что определение/настройка может быть в другом месте

1 Ответов

Рейтинг:
0

Bryian Tan

Добавить а [RoutePrefix ("api/ServiceA")] атрибут к контроллеру. Без этого, так или иначе, действительный URI будет http://localhost:2280/isbn вместо этого http://localhost:2080/api/ServiceA/isbn

[RoutePrefix("api/ServiceA")]
    public class ServiceAController : ApiController

Я получил ту же ошибку без атрибутов RoutePrefix
<Error>
  <Message>No HTTP resource was found that matches the request URI 'http://localhost:47503/api/ServiceA/2'.</Message>
  <MessageDetail>No action was found on the controller 'ServiceA' that matches the request.</MessageDetail>
</Error>


codegeekalpha

но мне не нужен префикс маршрута в качестве api/serviceA. Я хочу, чтобы мой URI был localhost: 2280 / api/ServiceA/isbn.. Который уже определен в конфигурации WebAPI, но с этим я получаю ошибку no resource found

Bryian Tan

является ли слово" isbn " частью url-адреса?

codegeekalpha

Isbn исходит из базы данных и я пишу его как 1234 что является его значением в базе данных и имеет строковый тип

Bryian Tan

основываясь на том, что вы здесь представили, я действительно не понимаю, почему вы не можете поместить декоратор [RoutePrefix("api/ServiceA")] поверх контроллера. Затем вы можете перейти к http://localhost:47503/api/ServiceA/1 чтобы получить книгу, где isbn=1 .
Была ли ошибка?