Я был большим поклонником .NET с времен .NET Framework 1.1. Спустя годы и множество обновлений Microsoft сделала шаг вперед, представив .NET Core и Visual Studio Code, что позволило разработчикам писать и запускать код откуда угодно без потери производительности, безопасности или эффективности. Если вы задаетесь вопросом: «Что дает мне .NET Core?», загляните сюда. В предыдущей статье блога мы создали API для отправки фотографий через MMS с использованием облачного хранилища Dropbox на C# и .NET Framework 4.5. Давайте перенесем этот API с .NET Framework на .NET Core.
Для этого нам нужно:
— Установить .NET Core (и все необходимые зависимости), Visual Studio Code и расширение C#
— Создать новый проект с помощью интерфейса командной строки (CLI) .NET Core
— Скопировать существующий код и исправить проблемы конвертации
— Запустить приложение и получить достижения!
Если вы не читали оригинальную статью, создайте аккаунт Twilio, аккаунт разработчика Dropbox и приложение Dropbox с папкой приложения, так как они понадобятся нам позже.
Сначала установите .NET Core и Visual Studio Code. Если вы уже разработчик .NET и используете Visual Studio, вы, вероятно, думаете: «Разве я не могу использовать Visual Studio для этого?» Конечно, можете, но в этой статье давайте попробуем Visual Studio Code.
После установки запустите Visual Studio Code, нажмите `⌘ + P` на клавиатуре (или `Ctrl + P` в Windows) и введите команду `ext install csharp`.
В панели расширений найдите расширение C#. Когда появятся результаты, установите расширение от Microsoft. Оно должно выглядеть как на картинке справа. После нажатия кнопок *C#* и *Install* мы будем готовы двигаться дальше.
Перезагрузите Visual Studio Code.
Работа в Visual Studio Code строится на использовании папок и взаимодействии с командной строкой. Если вы привыкли к Visual Studio, возможно, вы испытываете те же чувства, что и я после прочтения этой строки. Давайте остановимся и признаем это:
Теперь, когда мы это прояснили, не волнуйтесь! Обещаю, это будет легко и быстро! Итак, запустите терминал на Mac (или командную строку в Windows). В этом окне перейдите в директорию, где хотите сохранить проект, и выполните следующие команды:
«`
mkdir CoreApi
cd CoreApi
dotnet new webapi
«`
Эти команды создают проект ASP.NET Web API в папке *CoreApi*. Далее давайте восстановим некоторые пакеты NuGet, которые мы использовали в оригинальном проекте. Для этого вернитесь в терминал и введите следующие команды:
«`
dotnet add package Twilio
dotnet add package Newtonsoft.Json
dotnet restore
«`
Затем введите `code .` в терминале. Если в Visual Studio Code появится панель инструментов с сообщением «*Отсутствуют необходимые ресурсы для сборки и отладки в ‘CoreApi’*», нажмите кнопку *Yes*. Это создаст папку *.vscode*, содержащую два файла, которые VS Code использует для запуска и отладки приложения. Наконец, создадим необходимые файлы, введя следующие команды в терминале:
«`
code DropboxHelper.cs
code Controllers/PhotosController.cs
«`
Затем перейдите в *Файл > Сохранить все*, чтобы сохранить файлы. На картинке справа показана наша завершенная настройка.
Мы ввели кучу команд, но кода пока нет. Вам уже грустно?
Надеюсь, что нет, потому что пришло время писать код. 😀
**Файл DropboxHelper.cs**
Перейдите к файлу DropboxHelper.cs из оригинального проекта. Скопируйте код оттуда и вставьте его в файл *Helper.cs* в Visual Studio Code.
После копирования кода метод *PostAsJsonAsync* будет содержать ошибки, так как в .NET Core нет его реализации. Чтобы исправить это, внесем следующие изменения:
— Добавьте следующее сразу после операторов *using* в начале файла:
«`csharp
using System.Net.Http;
using System.Text;
«`
— В конструкторе DropboxHelper добавьте эту строку сразу после установки заголовка Authorization в строке 21:
«`csharp
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(«application/json»));
«`
— Замените строки, вызывающие *PostAsJsonAsync*, на следующее:
«`csharp
var content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, «application/json»);
var response = await _client.PostAsync(url, content);
«`
Эти изменения добавляют поддержку парсинга JSON в нашем приложении. На этом обновление файла помощника завершено. Если вы хотите запустить это, сгенерируйте токен доступа из созданного вами приложения Dropbox и замените строку «UPDATE_YOUR_ACCESS_TOKEN_HERE» на него. Также загрузите фотографию в папку приложения, которую вы создали.
**Файл PhotosController.cs**
Далее перейдите к файлу PhotosController.cs из оригинального проекта. Скопируйте код оттуда и вставьте его в файл PhotosController.cs в Visual Studio Code.
Внесем несколько изменений:
— Замените `using System.Web.Http;` на `using Microsoft.AspNetCore.Mvc;`
— Замените `namespace BabyApi.Controllers` на `namespace CoreApi.Controllers`
— Добавьте следующее над объявлением класса: `[Route(«api/[controller]»)]`
— Замените `public class PhotosController:ApiController` на `public class PhotosController:Controller`
— Замените `public async Task
— Замените оператор возврата в методе *Get* на этот:
«`csharp
return Content(response.ToString(), «application/xml»);
«`
Обновление кода завершено! Давайте присоединимся к миньонам и поаплодируем.
После загрузки фотографии в папку вашего приложения Dropbox и обновления токена доступа в файле *DropboxHelper.cs* введите `dotnet run` в терминале, а затем перейдите по адресу http://localhost:5000/api/photos (это URL по умолчанию в .NET Core). Если вы не видите URL с хостом *dropboxusercontent*, не волнуйтесь. Проверьте, что ваша фотография загружена в ту же папку приложения, которую создал Dropbox для запуска этого приложения. Если ваш браузер выглядит похоже на изображение выше, настало время танцевать!
Если вы хотите подключить этот код к Twilio, ознакомьтесь с разделом **Подключение нашего кода к Twilio** в оригинальной статье блога. Теперь мы можем писать код на .NET на любой ОС, поддерживаемой Visual Studio Code, и запускать наш API .NET на любой ОС, поддерживаемой .NET Core. Кросс-платформенность, мы идем!
Если вы хотите скачать готовый код, возьмите его на GitHub. Оставьте комментарий ниже или напишите мне в Twitter @CoreyLWeathers, если столкнетесь с проблемами. Не могу дождаться, чтобы увидеть, что вы создадите.