OWIN и Katana. Часть 2 – Пишем WebAPI приложение

Во второй части посмотрим насколько просто создать WebAPI приложение на базе OWIN.

Необходимо отметить, что разработчики Katana вместо базовых типов и интерфейсов используют соглашения. Они обещали, что многие из них будут переопределяемы. Но сейчас не будем углубляться в их детали и воспользуемся именами и значениями по умолчанию.

Подготавливаем проект

Итак, задача – создать приложение, использующее WebAPI. В качестве сервера выберем IIS, поэтому создадим пустой веб-проект (ASP.NET Empty Web Application). Это не принципимально для Katana, но позволит сразу получить проект с подключенной System.Web и настроенным для отладки IIS Express. Создаваемое решение назовем OwinWebAPIDemo.

С помощью NuGet (Package Manager Console) установим библиотеку WebAPI для OWIN:

PM> Install-Package Microsoft.AspNet.WebApi.Owin -Prerelease

Сборки Katana (реализация спецификации OWIN от Microsoft) будут добавлены в проект автоматически. Поскольку они не зависят от типа сервера, то необходимо также подключить библиотеку, реализующую OWIN для IIS (другие варианты рассмотрим в следующей части):

PM> Install-Package Microsoft.Owin.Host.SystemWeb

Подготовка проекта завершена. Теперь самое время рассмотреть первое из соглашений Katana.

Соглашение для конфигурации конвейера обработки сообщений

При запуске веб-приложения, Katana ищет класс Startup и вызывает его метод Configuration() для создания и настройки конвейера обработки сообщений:

public class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
        // создание, конфигурация и установка модулей для конвейера
    }
}

Интерфейс IAppBuilder используется для указания используемых модулей. Для этого необходимо передать их в качестве параметра appBuilder.Use(). Однако, библиотека Microsoft.AspNet.WebApi.Owin добавляет свой метод-расширение UseWebApi(), что упрощает её подключение.

Как и в обычном веб-приложении, требуется создать конфигурацию для корректной работы WebAPI. Поэтому создадим переменную config и определим очень простой путь "{controller}". В итоге, добавим в проект класс Startup со следующим кодом:

namespace OwinWebAPIDemo
{
    using System.Web.Http;
    using Owin;

    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            var config = new HttpConfiguration();
            config.Routes.MapHttpRoute("default", "{controller}");

            appBuilder.UseWebApi(config);
        }
    }
}

Предположим, что в приложении потребовалось использовать несколько модулей. Тогда после UseWebApi() для них расположились бы вызовы Use() или других методов-расширений. Их порядок определяет очередность, в которой происходит обработка запроса и формирование ответа. Как можно заметить, все достаточно легко и понятно.

Работаем с WebAPI

Остается добавить Контроллер. Для этого создадим папку Controllers и в ней разместим HomeController. Пусть он возвращает 10 целых чисел, начиная с нуля:

namespace OwinWebAPIDemo.Controllers
{
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Http;

    public class HomeController : ApiController
    {
        public IEnumerable<int> GetValues()
        {
            return Enumerable.Range(0, 10);
        }
    }
}

Запустим полученное приложение и обратимся по пути

http://localhost:[ваш порт]/Home 

Ответом будет json c массивом чисел: [0,1,2,3,4,5,6,7,8,9]. Если воспользоваться, например, Fiddler и добавить в запрос заголовок Accept: application/xml, то сервер вернет результат в XML.

Можно отметить, что созда��ное веб-приложение получилось даже проще, чем его аналог на стандартном шаблоне WebAPI.

В следующей части разберемся с некоторыми деталями работы Katana более детально. В частности напишем собственный модуль и поменяем тип сервера с IIS на самостоятельное приложение (self-host).

Комментарии (5) -

Вадим 22.07.2013 14:47:56

Подскажите пожалуйста а вы будете дописывать цыкл статей по паттернам проектирования, как я вижу не все поведенческие ?

@ Вадим: Планы есть, но все зависит от наличия времени. В большем приоритете статьи по ASP.NET и MVC.

Вадим 23.07.2013 14:25:33

Ок, спс))) Буду с нетерпением ждать )))

Игорь 23.07.2013 18:08:29

Спасибо, из твоих двух статей про OWIN и Katana стало намного понятнее что это и для чего

раз у тебя планы писать про MVC, мог бы что то написать про Domain Events?
www.udidahan.com/.../
очень интересная тема, надеюсь на новый цикл статей Smile

@ Игорь: Пожелание приму во внимание, но обещать не могу.

Добавить комментарий