Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Майк Уосон
Скачивание завершенного проекта
В этом руководстве вы будете использовать ASP.NET Web API для создания Web API, который возвращает список продуктов.
HTTP не только для обслуживания веб-страниц. HTTP также является мощной платформой для создания API, предоставляющих службы и данные. HTTP является простым, гибким и универсальным. Почти любая платформа, о которой можно подумать, имеет библиотеку HTTP, поэтому службы HTTP могут достичь широкого спектра клиентов, включая браузеры, мобильные устройства и традиционные классические приложения.
ASP.NET веб-API — это платформа для создания веб-API на основе .NET Framework.
Версии программного обеспечения, используемые в руководстве
- Visual Studio 2017
- Веб-API 2
См.
Создание проекта веб-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.
Добавление модели
Модель — это объект, представляющий данные в приложении. ASP.NET веб-API может автоматически сериализовать модель в 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 .
В обозревателе решений щелкните правой кнопкой мыши папку Контроллеров. Нажмите кнопку "Добавить " и выберите "Контроллер".
В диалоговом окне Добавление шаблона выберите Контроллер веб-API — пустой. Нажмите кнопку Добавить.
В диалоговом окне добавления контроллера назовите контроллер ProductsController. Нажмите кнопку Добавить.
Шаблон создает файл с именем ProductsController.cs в папке "Контроллеры".
Замечание
Контроллеры не нужно помещать в папку с именем "Контроллеры". Имя папки — это просто удобный способ упорядочить исходные файлы.
Если этот файл еще не открыт, дважды щелкните файл, чтобы открыть его. Замените код в этом файле следующим образом:
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<Product>. - Метод
GetProductищет один продукт по его идентификатору.
Вот и все! У вас есть рабочий веб-API. Каждый метод на контроллере соответствует одному или нескольким URI:
| Метод контроллера | URI |
|---|---|
| GetAllProducts | /api/products |
| ПолучитьПродукт | /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", где идентификатором является идентификатор продукта.
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 в Internet Explorer 9. В Internet Explorer 9 нажмите клавишу F12 , чтобы открыть инструменты. Перейдите на вкладку "Сеть" и нажмите кнопку "Начать запись". Теперь вернитесь на веб-страницу и нажмите клавишу F5 , чтобы перезагрузить веб-страницу. Internet Explorer фиксирует HTTP-трафик между браузером и веб-сервером. В представлении сводки отображается весь сетевой трафик для страницы:
Найдите запись для относительного URI api/products/. Выберите эту запись и нажмите кнопку "Перейти к подробному представлению". В детализированном представлении есть вкладки для просмотра заголовков и содержимого запросов и ответов. Например, если щелкнуть вкладку Заголовки запроса, можно увидеть, что клиент запросил "application/json" в заголовке Accept.
Если щелкнуть вкладку "Текст ответа", вы увидите, как список продуктов был сериализован в JSON. Другие браузеры имеют аналогичные функции. Другим полезным средством является Fiddler, прокси-сервер веб-отладки. Fiddler можно использовать для просмотра HTTP-трафика, а также для создания HTTP-запросов, что обеспечивает полный контроль над заголовками HTTP в запросе.
Ознакомьтесь с этим приложением, работающим в Azure
Хотите увидеть готовый сайт, работающий как динамическое веб-приложение? Вы можете развернуть полную версию приложения в учетной записи Azure.
Для развертывания этого решения в Azure требуется учетная запись Azure. Если у вас еще нет учетной записи, у вас есть следующие параметры:
- Откройте учетную запись Azure бесплатно . Вы получаете кредиты, которые можно использовать для пробных платных служб Azure, и даже после того, как они используются, вы можете сохранить учетную запись и использовать бесплатные службы Azure.
- Активируйте преимущества подписчика MSDN - Ваша подписка MSDN предоставляет кредиты каждый месяц, которые можно использовать для платных сервисов Azure.
Дальнейшие шаги
- Более полный пример HTTP-службы, поддерживающей действия POST, PUT и DELETE, а также запись в базу данных, см. в разделе "Использование веб-API 2 с Entity Framework 6".
- Дополнительные сведения о создании гибких и адаптивных веб-приложений на основе службы HTTP см. в ASP.NET Single Page Application.
- Сведения о развертывании веб-проекта Visual Studio в Службе приложений Azure см. в статье "Создание веб-приложения ASP.NET в службе приложений Azure".