Предыдущее руководство. Функции 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 file var 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 blob var 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, являются их собственными. |