Упражнение. Создание проекта Функций Azure
Вашему веб-приложению со списком покупок требуется API. В этом упражнении вы создаете и запускаете API с помощью проекта Функции Azure. Затем вы расширяете API с помощью новой функции с помощью расширения Функции Azure для Visual Studio.
В этом упражнении выполните следующие действия.
- Создание ветви при подготовке к внесению изменений в веб-приложение
- Изучение проекта функций Azure.
- Создание функции HTTP GET
- Замена начального кода функции на логику для получения продуктов
- Настройка веб-приложения для направления HTTP-запросов к API через прокси
- Запуск API и веб-приложения
Примечание.
Убедитесь, что вы настроили Visual Studio для разработки Azure с помощью .NET.
Получение приложения-функции
Теперь вы добавите API и подключите его к интерфейсным приложениям. Проект API включает неполный Функции Azure проект, поэтому давайте завершим это сейчас.
Создание ветви API
Прежде чем вносить в приложение изменения, рекомендуется создать для изменений новую ветвь. Вы вскоре завершите создание API для своего приложения, так что сейчас самое время создать в Git ветвь c именем api.
Завершение API Функций Azure
В папке Api содержится проект Функций Azure, а также три функции.
Класс | Способ | Маршрут |
---|---|---|
ProductsPost | POST | products |
ProductsPut | PUT | products/:id |
ProductsDelete | DELETE | 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
к каталогу products. Ваш метод 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 Core Tools. Файл local.settings.json указан в файле gitignore, который предотвращает отправку этого файла в GitHub. В этом файле можно хранить секреты, которые вы не хотите передавать в GitHub. В том числе и поэтому вам нужно было создать этот файл при создании репозитория на основе шаблона.
Запуск API и веб-приложения
Теперь проверим, как ваше веб-приложение и проект Функций Azure работают вместе.
Щелкните правой кнопкой решение ShoppingList в Visual Studio.
Выберите пункт Настроить автозагружаемые проекты.
Выберите вариант Несколько автозагружаемых проектов.
Задайте для Api и клиентаЗапуск в качестве действия, а затем нажмите кнопку OK.
Запустите отладчик.
Перейдите к своему приложению.
Теперь посмотрим, как ваше приложение выполняется локально, используя API Функций Azure.
Найдите веб-приложение (например, https://localhost:44348/
).
Вы собрали приложение, и теперь оно работает локально, отправляя HTTP-запросы GET к вашему API.
Теперь отключите свое запущенное приложение и API, отключив отладчик в Visual Studio.
Следующие шаги
Ваше приложение работает локально, и ваш следующий шаг — опубликовать его вместе с API.