Если вы ненавидите IIS, эта статья для вас. Он научит вас использовать Owin для размещения WebApi в консольном приложении. В идеале вы хотите, чтобы OWIN размещал ваш API в службе Windows, но это уже другая статья.

Вы можете найти полный проект здесь:
https://github.com/RoccoSen/OwinToWebAPI

Предварительные требования:

- Установлен ли V isual Studio 2017 Community Edition

1. Создайте новый проект консольного приложения с помощью .NET Framework.

Файл - ›Новый -› Проект

2. Установите OWIN с помощью консоли диспетчера пакетов NuGet.

Инсталляционный пакет Microsoft.AspNet.WebApi.OwinSelfHost

3. Создайте класс Startup.cs для конфигурации OWIN. Создайте это в корне вашего проекта.

using Microsoft.Owin;
using Owin;
using System.Web.Http;
[assembly: OwinStartup(typeof(OwinAPI.Startup))]
namespace OwinAPI
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Configure Web API for self-host. 
            // Note: I prefer my routes to be "api/{controller}/{action}" instead of "api/{controller}/{id}"
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}",
                defaults: new { id = RouteParameter.Optional }
            );
            app.UseWebApi(config);
        }
    }
}

4. Измените static void main на хост OWIN.

Примечание. Я использую http: // localhost: 9000. Используйте любой URL-адрес, который вы хотите разместить в OWIN.

using Microsoft.Owin.Hosting;
using System;
namespace OwinAPI
{
    class Program
    {
        const string url = "http://localhost:9000";
static void Main(string[] args)
        {
            using (WebApp.Start<Startup>(url))
            {
                Console.WriteLine("Server started at:" + url);
                Console.ReadLine();
            }
        }
    }
}

5. Добавьте контроллер API.

Мне нравится сгруппировать свои контроллеры в папку под названием «Контроллер». Вот код для ApiController. Он просто возвращает массив слов.

using System.Collections.Generic;
using System.Web.Http;
namespace OwinAPI.Controller
{
    public class TestController : ApiController
    {
        public IEnumerable<string> GetTest()
        {
            return new string[] { "One", "Two", "Three" };
        }
    }
}

6. Протестируйте (сделайте запрос к URL, чтобы узнать, все ли работает.)

Заметили, что мы возвращаем XML, а не JSON? Это потому, что XML является конфигурацией по умолчанию. В идеале вы хотите, чтобы это был JSON. Это можно сделать, обновив класс Startup.