Начало работы с веб-API ASP.NET 2 (C#)
Майк Уассон
В этом руководстве вы будете использовать веб-API ASP.NET для создания веб-API, который возвращает список продуктов.
HTTP предназначен не только для обслуживания веб-страниц. HTTP также является мощной платформой для создания API, которые предоставляют службы и данные. HTTP — это простой, гибкий и вездесущий протокол. Почти любая платформа, которую можно представить, имеет библиотеку HTTP, поэтому службы HTTP могут обращаться к широкому кругу клиентов, включая браузеры, мобильные устройства и традиционные классические приложения.
веб-API ASP.NET — это платформа для создания веб-API на основе платформа .NET Framework.
Версии программного обеспечения, используемые в этом руководстве
- Visual Studio 2017
- Веб-API 2
Дополнительные сведения см. в статье Создание веб-API с помощью ASP.NET Core и Visual Studio для Windows.
Создание проекта веб-API
В этом руководстве вы будете использовать веб-API ASP.NET для создания веб-API, который возвращает список продуктов. Интерфейсная веб-страница использует jQuery для отображения результатов.
Запустите Visual Studio и выберите Создать проект на начальной странице. Или в меню Файл выберите Создать , а затем — Проект.
В области Шаблоны выберите Установленные шаблоны и разверните узел Visual C# . В разделе Visual C# выберите Интернет. В списке шаблонов проектов выберите ASP.NET веб-приложение. Назовите проект ProductsApp и нажмите кнопку ОК.
В диалоговом окне Создать проект ASP.NET выберите пустой шаблон. В разделе "Добавление папок и основных ссылок для" проверка веб-API. Нажмите кнопку ОК.
Примечание
Вы также можете создать проект веб-API с помощью шаблона "Веб-API". Шаблон веб-API использует ASP.NET MVC для предоставления страниц справки по API. Я использую пустой шаблон для этого руководства, так как я хочу показать веб-API без MVC. Как правило, вам не нужно знать, ASP.NET MVC для использования веб-API.
Добавление модели
Модель — это объект, который представляет данные в приложении. веб-API ASP.NET может автоматически сериализовать модель в ФОРМАТЕ JSON, XML или в другом формате, а затем записать сериализованные данные в текст ответа HTTP. Пока клиент может считывать формат сериализации, он может десериализовать объект . Большинство клиентов могут анализировать XML или JSON. Кроме того, клиент может указать нужный формат, задав заголовок Accept в сообщении HTTP-запроса.
Начнем с создания простой модели, представляющей продукт.
Если обозреватель решений не отображается, щелкните меню Просмотр и выберите Обозреватель решений. В обозревателе решений щелкните правой кнопкой мыши папку Models. В контекстном меню выберите Добавить, а затем выберите Класс.
Назовите класс "Product". Добавьте следующие свойства в Product
класс .
namespace ProductsApp.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
Добавление контроллера
В веб-API контроллер — это объект, который обрабатывает HTTP-запросы. Мы добавим контроллер, который может возвращать список продуктов или один продукт, указанный идентификатором.
Примечание
Если вы использовали ASP.NET MVC, вы уже знакомы с контроллерами. Контроллеры веб-API похожи на контроллеры MVC, но наследуют класс ApiController , а не класс Controller .
В обозревателе решений щелкните правой кнопкой мыши папку Controllers. Щелкните Добавить, а затем выберите Контроллер.
В диалоговом окне Добавление шаблона выберите Контроллер веб-API — пустой. Нажмите кнопку Добавить.
В диалоговом окне Добавление контроллера назовите контроллер "ProductsController". Нажмите кнопку Добавить.
Формирование шаблонов создает файл с именем ProductsController.cs в папке Controllers.
Примечание
Вам не нужно помещать контроллеры в папку с именем Контроллеры. Имя папки — это просто удобный способ упорядочить исходные файлы.
Если этот файл еще не открыт, дважды щелкните его. Замените код в этом файле следующим кодом:
using ProductsApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace ProductsApp.Controllers
{
public class ProductsController : ApiController
{
Product[] products = new Product[]
{
new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
};
public IEnumerable<Product> GetAllProducts()
{
return products;
}
public IHttpActionResult GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
}
}
Чтобы упростить пример, продукты хранятся в фиксированном массиве внутри класса контроллера. Конечно, в реальном приложении вы будете запрашивать базу данных или использовать другой внешний источник данных.
Контроллер определяет два метода, возвращающих продукты:
- Метод
GetAllProducts
возвращает весь список продуктов как тип продукта> IEnumerable<. - Метод
GetProduct
ищет один продукт по его идентификатору.
Вот и все! У вас есть рабочий веб-API. Каждый метод на контроллере соответствует одному или нескольким URI:
Метод контроллера | URI |
---|---|
GetAllProducts | /api/products |
GetProduct | /api/products/id |
GetProduct
Для метода идентификатор в URI является заполнителем. Например, чтобы получить продукт с идентификатором 5, универсальный код ресурса (URI) имеет значение api/products/5
.
Дополнительные сведения о том, как веб-API направляет HTTP-запросы к методам контроллера, см. в статье Маршрутизация в веб-API ASP.NET.
Вызов веб-API с помощью JavaScript и jQuery
В этом разделе мы добавим HTML-страницу, которая использует AJAX для вызова веб-API. Мы будем использовать jQuery для выполнения вызовов AJAX, а также для обновления страницы с результатами.
В Обозреватель решений щелкните правой кнопкой мыши проект и выберите Добавить, а затем — Новый элемент.
В диалоговом окне Добавление нового элемента выберите веб-узел в разделе Visual C#, а затем выберите элемент HTML-страница . Назовите страницу "index.html".
Замените все содержимое этого файла следующим:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Product App</title>
</head>
<body>
<div>
<h2>All Products</h2>
<ul id="products" />
</div>
<div>
<h2>Search by ID</h2>
<input type="text" id="prodId" size="5" />
<input type="button" value="Search" onclick="find();" />
<p id="product" />
</div>
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
var uri = 'api/products';
$(document).ready(function () {
// Send an AJAX request
$.getJSON(uri)
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#products'));
});
});
});
function formatItem(item) {
return item.Name + ': $' + item.Price;
}
function find() {
var id = $('#prodId').val();
$.getJSON(uri + '/' + id)
.done(function (data) {
$('#product').text(formatItem(data));
})
.fail(function (jqXHR, textStatus, err) {
$('#product').text('Error: ' + err);
});
}
</script>
</body>
</html>
Для получения jQuery можно использовать следующие способы. В этом примере я использовал cdn Microsoft Ajax. Вы также можете скачать его по адресу http://jquery.com/, и шаблон проекта ASP.NET "Веб-API" также включает jQuery.
Получение списка продуктов
Чтобы получить список продуктов, отправьте HTTP-запрос GET по адресу /api/products.
Функция jQuery getJSON отправляет запрос AJAX. Ответ содержит массив объектов JSON. Функция done
задает обратный вызов, который вызывается при успешном выполнении запроса. В обратном вызове мы обновляем модель DOM, указав сведения о продукте.
$(document).ready(function () {
// Send an AJAX request
$.getJSON(apiUrl)
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#products'));
});
});
});
Получение продукта по идентификатору
Чтобы получить продукт по идентификатору, отправьте HTTP-запрос GET по адресу /api/products/id, где id — это идентификатор продукта.
function find() {
var id = $('#prodId').val();
$.getJSON(apiUrl + '/' + id)
.done(function (data) {
$('#product').text(formatItem(data));
})
.fail(function (jqXHR, textStatus, err) {
$('#product').text('Error: ' + err);
});
}
Мы по-прежнему вызываем getJSON
для отправки запроса AJAX, но на этот раз мы помещаем идентификатор в URI запроса. Ответ от этого запроса представляет собой представление одного продукта в формате JSON.
Запуск приложения
Нажмите клавишу F5 для запуска отладки приложения. Веб-страница должна выглядеть следующим образом:
Чтобы получить продукт по идентификатору, введите идентификатор и нажмите кнопку Поиск:
Если ввести недопустимый идентификатор, сервер возвращает ошибку HTTP:
Использование F12 для просмотра HTTP-запроса и ответа
При работе со службой HTTP может быть очень полезно просматривать http-запросы и ответные сообщения. Это можно сделать с помощью средств разработчика F12 в Интернете Обозреватель 9. В Интернете Обозреватель 9 нажмите клавишу F12, чтобы открыть инструменты. Перейдите на вкладку Сеть и нажмите кнопку Начать запись. Теперь вернитесь на веб-страницу и нажмите клавишу F5 , чтобы перезагрузить веб-страницу. Интернет-Обозреватель фиксирует HTTP-трафик между браузером и веб-сервером. В представлении сводки отображается весь сетевой трафик для страницы:
Найдите запись относительного URI "api/products/". Выберите эту запись и щелкните Перейти к подробному представлению. В представлении сведений есть вкладки для просмотра заголовков и текста запроса и ответа. Например, если щелкнуть вкладку Заголовки запроса , вы увидите, что клиент запросил "application/json" в заголовке Accept.
Если щелкнуть вкладку Текст ответа, вы увидите, как список продуктов был сериализован в ФОРМАТЕ JSON. Другие браузеры имеют аналогичные функции. Другим полезным инструментом является Fiddler, прокси-сервер веб-отладки. Fiddler можно использовать для просмотра трафика HTTP, а также для создания HTTP-запросов, что обеспечивает полный контроль над заголовками HTTP в запросе.
См. это приложение, работающее в Azure
Хотите, чтобы готовый сайт работал как динамическое веб-приложение? Вы можете развернуть полную версию приложения в своей учетной записи Azure.
Для развертывания этого решения в Azure требуется учетная запись Azure. Если у вас еще нет учетной записи, доступны следующие варианты:
- Откройте учетную запись Azure бесплатно . Вы получаете кредиты, которые можно использовать для использования платных служб Azure, и даже после их использования вы можете сохранить учетную запись и использовать бесплатные службы Azure.
- Активация преимуществ для подписчиков MSDN . Ваша подписка MSDN ежемесячно предоставляет вам кредиты, которые можно использовать для платных служб Azure.
Next Steps
- Более полный пример службы HTTP, которая поддерживает действия POST, PUT и DELETE и операции записи в базу данных, см. в статье Использование веб-API 2 с Entity Framework 6.
- Дополнительные сведения о создании гибких и гибких веб-приложений на основе службы HTTP см. в статье ASP.NET одностраничное приложение.
- Сведения о развертывании веб-проекта Visual Studio в Служба приложений Azure см. в статье Создание веб-приложения ASP.NET в Служба приложений Azure.