codegeekalpha Ответов: 1

Получение нулевого значения вместо данных в web API 2


с этим Ури
http://localhost:2259/api/ServiceA/1234"

где isbn=1234 значение isbn равно 1234 в базе данных

Я становлюсь нулевым . В то время как у меня есть данные в базе данных, которые должны быть показаны здесь

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

мой webapiconfig
public static class WebApiConfig
   {
       public static void Register(HttpConfiguration config)
       {
           config.MapHttpAttributeRoutes();

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



а моя служба контролер
public class ServiceAController : ApiController
   {


       [HttpGet]
       public Book GetBook(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();

           }

       }
   }

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Ну, вы получаете null, потому что ваш запрос, где условие не соответствует никаким записям.

Поставьте точку останова на using постройте и проверьте значение isbn Скорее всего, его ценность не такова, как вы думаете.


codegeekalpha

если я использую [route ("api/serviceA/1234")], я получаю результаты с uri localhost/1234
но я хочу, чтобы resutls были восстановлены на localhost/api/serviceA/1234

Dave Kreskowiak

Используйте [RoutePrefix ("/api/controllerName")] вместо этого в классе контроллера.

Затем вы можете использовать [Route ("{isbn}")] в методе GetBook.

Затем вы должны быть в состоянии использовать http://localhost/api/ServiceAController/GetBook/1234 чтобы получить содержание.

codegeekalpha

я сделал, как ты сказал ..
http://localhost:2280/1234
Я получаю {"Id":1,"ISBN":"1234","название":"Название 1","издатель":null,"автор":"Farooq","цена":35000.00, "источник": "книжный магазин 2", "PurchaseUrl":null}


и с этим
http://localhost:2280/api/ServiceA/1234

я получаю ноль

Bryian Tan

Ваш код выглядит нормально. Я проверил. Если только вы не опустили некоторые детали. Похоже, этот вопрос-повторный пост от Web API 2 не извлекает данные из базы данных[^]

Находится ли webapi в отдельном проекте или в веб-проекте?

Dave Kreskowiak

Ты не можешь этого сделать. Вы даете имя контроллера, но не имя метода. Он понятия не имеет, что вы хотите вызвать метод GetBook, если вы его не укажете. Удалить это просто глупо, потому что тогда вы сможете поместить в контроллер только один метод.

codegeekalpha

Он находится в веб-проекте s....

codegeekalpha

[RoutePrefix ("api/ServiceA/GetBook")] Я попробовал с этим... те же результаты.. никакое изменение..

Dave Kreskowiak

Ты не делаешь того, что я сказал.

codegeekalpha

не могли бы вы объяснить, что вы пытаетесь сказать

Dave Kreskowiak

Нет. Вернитесь и перечитайте то, что я сказал.