Упражнение. Создание проекта Функций Azure

Завершено

Вашему веб-приложению со списком покупок требуется API. В этом упражнении вы создаете и запускаете API с помощью проекта Функции Azure. Затем вы расширяете API с помощью новой функции с помощью расширения Функции Azure для Visual Studio.

В этом упражнении выполните следующие действия.

  1. Создание ветви при подготовке к внесению изменений в веб-приложение
  2. Изучение проекта функций Azure.
  3. Создание функции HTTP GET
  4. Замена начального кода функции на логику для получения продуктов
  5. Настройка веб-приложения для направления HTTP-запросов к API через прокси
  6. Запуск 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

  1. В Visual Studio щелкните правой кнопкой мыши проект Api и выберите Добавить>Новый элемент.

    A screenshot showing how to create the Azure function item.

  2. В диалоговом окне Добавление нового элемента выберите Функция Azure.

    A screenshot showing the Azure function item selected.

  3. В качестве имени файла функции введите ProductsGet.cs.

  4. В качестве типа функции выберите Триггер HTTP.

  5. Выберите значение Анонимный в раскрывающемся списке в поле Уровень авторизации.

    A screenshot showing the HTTP trigger selected.

  6. Выберите Добавить.

Вы дополнили приложение функций 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> асинхронно возвращает список продуктов.

Теперь измените конечную точку функции, чтобы она возвращала продукты.

  1. Откройте ProductsGet.cs.

  2. Замените его содержимое на следующий код:

    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 на вашем компьютере.

  1. Откройте файл под названием launchSettings.json в папке Свойства проекта API.

    • Если такой файл не существует, создайте его.
  2. Обновите содержимое файла:

    {
        "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 работают вместе.

  1. Щелкните правой кнопкой решение ShoppingList в Visual Studio.

  2. Выберите пункт Настроить автозагружаемые проекты.

  3. Выберите вариант Несколько автозагружаемых проектов.

  4. Задайте для Api и клиентаЗапуск в качестве действия, а затем нажмите кнопку OK.

  5. Запустите отладчик.

Перейдите к своему приложению.

Теперь посмотрим, как ваше приложение выполняется локально, используя API Функций Azure.

Найдите веб-приложение (например, https://localhost:44348/).

Вы собрали приложение, и теперь оно работает локально, отправляя HTTP-запросы GET к вашему API.

Теперь отключите свое запущенное приложение и API, отключив отладчик в Visual Studio.

Следующие шаги

Ваше приложение работает локально, и ваш следующий шаг — опубликовать его вместе с API.