Упражнение. Создание проекта Функций Azure
Вашему веб-приложению со списком покупок требуется API. В этом упражнении вы создаете и запускаете API с помощью проекта Функции Azure. Затем вы расширяете API с помощью новой функции с помощью расширения Функции Azure для Visual Studio.
В этом упражнении выполните следующие действия.
- Создание ветви при подготовке к внесению изменений в веб-приложение
- Изучение проекта функций Azure.
- Создание функции HTTP GET
- Замена начального кода функции на логику для получения продуктов
- Настройка веб-приложения для направления HTTP-запросов к API через прокси
- Запуск API и веб-приложения
Примечание.
Убедитесь, что вы настроили Visual Studio для разработки Azure с помощью .NET.
Получение приложения-функции
Теперь вы добавите API и подключите его к интерфейсным приложениям. Проект API включает неполный проект Функций Azure, поэтому давайте завершим это сейчас.
Создание ветви API
Прежде чем вносить в приложение изменения, рекомендуется создать для изменений новую ветвь. Вы готовы завершить API для приложения, поэтому создайте ветвь в Git с именем API.
Завершение API Функций Azure
Проект API содержит проект Функций Azure, а также три функции.
Класс | Способ | Маршрут |
---|---|---|
ProductsPost | ПОСТ | products |
ProductsPut | ПОСТАВИТЬ | products/:id |
ProductsDelete | Удалить | products/:id |
Ваш API включает маршруты для управления продуктами в списке покупок, но не имеет маршрута для получения продуктов. Давайте добавим следующее.
Создание функции HTTP GET
В Visual Studio щелкните проект API правой кнопкой мыши и выберите пункт "Добавить>новый элемент".
В диалоговом окне "Добавление нового элемента" выберите функцию Azure.
Введите ProductsGet.cs в качестве имени файла функции.
Выберите триггер Http в качестве типа функции.
Выберите "Анонимный" в раскрывающемся списке в поле уровня авторизации .
Нажмите кнопку "Добавить".
Вы дополнили приложение функций Azure функцией получения своих продуктов.
Настройка метода HTTP и конечной точки маршрута
Обратите внимание, что метод Run
только что созданного C# класса имеет атрибут HttpTrigger
для первого аргумента HttpRequest
. Этот атрибут определяет уровень доступа функции, а также методы HTTP для прослушивания и конечную точку маршрута.
Конечная точка маршрута по умолчанию означаетnull
, что конечная точка использует значение атрибутаFunctionName
.ProductsGet
Route
Задание свойства для "products"
переопределения поведения по умолчанию.
В настоящее время ваша функция вызывается при HTTP-запросе GET
к продуктам. Ваш метод Run
будет выглядеть следующим образом:
[FunctionName("ProductsGet")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
Обновление логики маршрута
Текст Run
метода выполняется при выполнении функции.
Чтобы получить продукты, необходимо обновить логику в методе Run
. В файле ProductData.cs
есть логика доступа к данным в виде класса с именем ProductData
с доступом через внедрение зависимостей в качестве интерфейса IProductData
. Интерфейс имеет метод на нем GetProducts
, который возвращает Task<IEnumerable<Product>
асинхронно возвращает список продуктов.
Теперь измените конечную точку функции, чтобы она возвращала продукты.
Откройте ProductsGet.cs.
Замените его содержимое на следующий код:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using System.Threading.Tasks; namespace Api; public class ProductsGet { private readonly IProductData productData; public ProductsGet(IProductData productData) { this.productData = productData; } [FunctionName("ProductsGet")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "products")] HttpRequest req) { var products = await productData.GetProducts(); return new OkObjectResult(products); } }
В предыдущих изменениях класс превратился из статического в класс экземпляра. Вы добавили интерфейс в конструктор, чтобы платформа внедрения зависимостей может внедрить ProductData
класс. Наконец, вы настроили функцию Run
для возврата списка продуктов при вызове.
Локальная настройка общего доступа к ресурсам независимо от источника (CORS)
При публикации в Статические веб-приложения Azure вам не нужно беспокоиться о совместном использовании ресурсов между источниками (CORS). Служба статических веб-приложений Azure автоматически настроит ваше приложение так, чтобы оно могло взаимодействовать с вашим API в Azure через обратный прокси-сервер. Но при локальном запуске CORS необходимо настроить так, чтобы ваше веб-приложение могло взаимодействовать с API.
Для этого Функции Azure должны предлагать возможность разрешать вашему веб-приложению отправлять HTTP-запросы к API на вашем компьютере.
Откройте файл с именем launchSettings.json в папке "Свойства " проекта API .
- Если такой файл не существует, создайте его.
Обновите содержимое файла:
{ "profiles": { "Api": { "commandName": "Project", "commandLineArgs": "start --cors *" } } }
Примечание.
Этот файл используется для управления способами, которыми Visual Studio запускает инструментарий Функций Azure. Если вы хотите использовать программу командной строки "Функции Azure", вам также потребуется local.settings.json файл, описанный в документации по основным средствам Функций Azure. Файлlocal.settings.json указан в файле gitignore , который предотвращает отправку этого файла в GitHub. В этом файле можно хранить секреты, которые вы не хотите передавать в GitHub. В том числе и поэтому вам нужно было создать этот файл при создании репозитория на основе шаблона.
Запуск API и веб-приложения
Теперь проверим, как ваше веб-приложение и проект Функций Azure работают вместе.
В Visual Studio щелкните правой кнопкой мыши решение ShoppingList .
Выберите "Настройка запускаемых проектов".
Выберите параметр "Несколько запускаемых проектов ".
Установите Api и Client, чтобы Start было их Action, а затем выберите Ok.
Запустите отладчик.
Перейдите к своему приложению.
Теперь посмотрим, как ваше приложение выполняется локально, используя API Функций Azure.
Найдите веб-приложение (например, https://localhost:44348/
).
Вы собрали приложение, и теперь оно работает локально, отправляя HTTP-запросы GET к вашему API.
Теперь отключите свое запущенное приложение и API, отключив отладчик в Visual Studio.
Следующие шаги
Ваше приложение работает локально, и ваш следующий шаг — опубликовать его вместе с API.