Создание и тестирование приложения Web API

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Итак, создадим новое приложение MVC 4 по типу Web API:

Назовем его, его например, BookStore. Допустим, наше приложение будет работать с книгами.

Сначала создадим модель данных, описывающую книгу. Добавим в папку Models новый класс Book:

public class Book
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Author { get; set; }
    public int Year { get; set; }
}

Затем добавим в папку Models контекст данных BookContext, через который будем взаимодействовать с базой данных:

using System.Data.Entity;
 
namespace BookStore.Models
{
    public class BookContext : DbContext
    {
        public DbSet<Book> Books { get; set; }
    }
}

И добавим в папку App_Data базу данных для нашего приложения, где будут храниться данные. В моем случае база данных будет называться BookDB. Создадим в ной базе данных таблицу Books для моделей книг:

И наполним таблицу некоторыми данными:

И в завершении настройки модельной части изменим строку подключения в файле web.config:

<connectionStrings>
    <add name="BookContext" providerName="System.Data.SqlClient" 
		connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\BookDB.mdf';Integrated Security=True" />
</connectionStrings>

Теперь перейдем к созданному по умолчанию контроллеру ValuesController и изменим его следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Entity;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using BookStore.Models;
using System.Data;

namespace BookStore.Controllers
{
    public class ValuesController : ApiController
    {
        BookContext db = new BookContext();

        public IEnumerable<Book> GetBooks()
        {
            return db.Books;
        }

        public Book GetBook(int id)
        {
            Book book = db.Books.Find(id);
            return book;
        }

        [HttpPost]
        public void CreateBook([FromBody]Book book)
        {
            db.Books.Add(book);
            db.SaveChanges();
        }

        [HttpPut]
        public void EditBook(int id, [FromBody]Book book)
        {
            if (id == book.Id)
            {
                db.Entry(book).State = EntityState.Modified;

                db.SaveChanges();
            }
        }

        public void DeleteBook(int id)
        {
            Book book = db.Books.Find(id);
            if(book!=null)
            {
                db.Books.Remove(book);
				db.SaveChanges();
            }
        }
    }
}

Таким образом, у нас получился практически стандартный контроллер, реализующий CRUD-модель, то есть добавление, получение, обновление и удаление данных.

Кстати чтобы создать аналогичный функционал мы можем не писать вручную код, а воспользоваться шаблонами формирования при создании контроллера. Для этого просто при создании нового API-контроллера укажем модель и класс контекста данных, которые будут использоваться (перед использованием модели приложение необходимо скомпилировать):

И шаблон формирование создаст нам аналогичный функционал с небольшими изменениями в коде.

Итак, теперь мы можем перейти к построению клиентской части, но перед этим протестируем приложение. Для тестирования GET-запросов нам достаточно простого веб-браузера, но воспользуемся более удобным инструментом web-отладки как Fiddler.

Fiddler позволяет отправлять различные запросы к веб-ресурсам. Итак, запустим наш проект в Visual Studio на выполнение. Параллельно откроем программу Fiddler. После запуска проекта должен запуститься встроенный asp.net сервер, который хостирует наше приложение. В Fiddler перейдите на вкладку Composer и введите в поле адреса строку запроса к нашему сервису. Например, в моем случае локальный сервер запустился по адресу http://localhost:2512/, поэтому строка запроса будет выглядеть так: http://localhost:2512/api/values/. Поскольку у нас слева от адреса стоит метод GET, поэтому в данном случае мы будем осуществлять запрос к методу public IEnumerable<Book> GetBooks().

После ввода адреса нажмем на Enter и перейдем на вкладку Inspectors, выбрав JSON в качестве формата отображения ответа, то увидим результат запроса - а именно список книг, который Fiddler получает в сериализованном виде:

Таким образом, мы убедились, что приложение работает. Подобным образом мы можем задать в Fiddler и другие запросы. А теперь перейдем к построению клиентской части приложения.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850