Предыдущее руководство. Функции Azure. Часть 1. Начало работы
В последнем уроке мы создали простую функцию Azure, которая возвращала значение. Я собираюсь улучшить этот проект и вернуть HTML-страницу из функции. Поскольку это оказалось намного проще, чем я, я приправил это, добавив не только один способ, но и три различных способа возврата веб-страницы — во-первых, статическую жестко закодированную страницу; во-вторых, страница, которая хранится как часть кода функции Azure; и в-третьих, страница, которая хранится в BLOB-объекте хранилища Azure.
Мы начнем с простой C # Azure Function без аутентификации, как в прошлый раз. Я назову это «HelloWorldHTML». Если вы следите за мной, это то, что вы должны иметь на своем экране:
Давайте начнем с возврата статической жестко закодированной страницы. Просто удалите весь код в функции и замените его следующим кодом:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
using System.Net;using System.Net.Http.Headers;public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log){ log.Info("C# HTTP trigger function processed a request."); // Option 1, coded HTML var response = req.CreateResponse(HttpStatusCode.OK, "Hello "); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); return response;} |
Как я уже сказал, очень просто. Здесь есть две новые вещи. Во-первых, нам нужно объявить, что мы используем пространство имен System.Net.Http.Headers потому что мы MediaTypeHeaderValue классом MediaTypeHeaderValue в этом пространстве имен. Во-вторых, мы добавляем в запрос заголовок ContentType , который сообщает браузеру, что мы возвращаем HTML, и должен его арендовать как таковой. Сохраните функцию и нажмите ссылку «Получить URL-адрес функции», чтобы получить прямой URL-адрес функции, откройте новое окно браузера и вставьте URL-адрес функции. Вы должны увидеть эту красивую HTML-страницу в окне вашего браузера:
Очевидно, вы можете вернуть любой HTML здесь, но, поскольку я ленив, это то, что я сделал :-).
Второй вариант — создать HTML-файл в коде функции и загрузить его оттуда. Чтобы создать новый файл, нажмите на текст «Просмотр файлов» в правой части экрана, чтобы открыть файлы, которые составляют функцию:
Это открывает список, как показано ниже:
Вы можете добавить новый файл или загрузить существующий. Я нажму «Добавить» и создам новый файл с именем «hello.html». Ваш список должен выглядеть так:
Давайте добавим простой HTML-код в этот файл, например так:
|
1
2
3
4
5
6
7
8
|
<html> <head> <title>Hello</title> </head> <body> World </body></html> |
Сохраните файл и вернитесь в файл run.csx где находится код функции. Прокомментируйте исходный код (все, что ниже «Варианта 1») и добавьте следующий код:
|
1
2
3
4
5
6
|
// Option 2, read from local filevar response = new HttpResponseMessage(HttpStatusCode.OK);var stream = new FileStream(@"d:\home\site\wwwroot\HelloWorldHTML\hello.html", FileMode.Open);response.Content = new StreamContent(stream);response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");return response; |
Мы читаем файл из локального хранилища, используя Stream , и устанавливаем этот файл как ответ на запрос. Нам все еще нужно сообщить браузеру, что контент — это HTML, в противном случае он может решить интерпретировать его как что-то еще (как в предыдущем уроке). Сохраните файл и снова перейдите к URL-адресу функции. Теперь вы должны увидеть эту красивую веб-страницу:
Выглядит иначе, чем предыдущий справа, один? Это означает, что код работает :-).
Теперь третий и последний вариант. Я не буду вдаваться в подробности о том, как создать BLOB-объект хранилища Azure и как загрузить файл в это хранилище, поэтому я оставлю это вам для изучения (типичное предложение моих профессоров, когда им нужно было объяснить что-то длинное и утомительное на уроке, но лень это делать…). Я просто предполагаю, что вы его создали, у вас есть контейнер BLOB-объектов с именем «site», где у вас есть файл с именем «hello.html», и что вы знаете, как извлечь строку подключения для учетной записи хранения. Много предположений, но именно так вы двигаетесь вперед.
Возвращаясь к коду, измените первую часть файла (раздел импорта) следующим образом:
|
1
2
3
4
5
6
|
#r "Microsoft.WindowsAzure.Storage"using System.Net;using System.Net.Http.Headers;using Microsoft.WindowsAzure.Storage;using Microsoft.WindowsAzure.Storage.Blob; |
Первая строка сообщает среде выполнения функции Azure, что эта функция ссылается на внешнюю сборку (библиотеку классов), которая не является частью стандартной среды выполнения. Хранилище Azure — это одна из специальных сборок, на которую можно ссылаться по имени без дополнительной работы, но в случае, если вам нужно сослаться на другие сборки, это также возможно, как описано здесь . Затем мы также заявляем, что используем пространства имен Microsoft.WindowsAzure.Storage и Microsoft.WindowsAzure.Storage.Blob , поэтому наш код выглядит лучше.
Теперь закомментируйте весь код ниже «Вариант 2» в вашем файле функций и добавьте следующий код:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
// Option 3, read from external blobvar storageAccount = CloudStorageAccount.Parse("<your azure storage connection string>");var blobClient = storageAccount.CreateCloudBlobClient();var container = blobClient.GetContainerReference("site");var blob = container.GetBlockBlobReference("hello.html");string text = "";using (var memoryStream = new MemoryStream()){ blob.DownloadToStream(memoryStream); text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());} var response = req.CreateResponse(HttpStatusCode.OK);response.Content = new StringContent(text);response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");return response; |
Этот код подключается к учетной записи хранения Azure с помощью CloudBlobClient , получает контейнер BLOB- CloudBlobClient с именем «site», а из контейнера — файл. Мы загружаем файл в MemoryStream и делаем Stream содержимым ответа функции. Теперь сохраните файл и снова перейдите к конечной точке URL-адреса функции. Вы должны увидеть что-то вроде этого:
Круто, верно? WordPress остерегайтесь, мы прямо за вами :-).
Надеюсь, вам понравился этот урок, и надеюсь, что вы узнали столько же, сколько я. У меня есть некоторые идеи о том, куда идти дальше, но я рад изучить больше вещей, поэтому оставьте свои идеи в комментариях, и я посмотрю, что я могу сделать.
Желаю вам удачного дня & # 55357; & # 56898;
| См. Оригинальную статью здесь: Функции Azure. Часть 2. Обслуживание страниц HTML с помощью функций Azure.
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |






