Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Итак, создадим новое приложение 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 и другие запросы. А теперь перейдем к построению клиентской части приложения.