自托管和 IIS 托管的 OWIN 项目

Self-Hostable and IIS-hostable OWIN project

我想在自托管的 OWIN 实例下将我的解决方案修改为 运行,但我也需要在必要时将其修改为 http://localhost 下的 运行。

我应该如何构建我的 Startup class 才能被双方识别?

目前,我将 Web API 项目设置为控制台应用程序,将项目 URL 设置为 http://localhost:2746,这是我的 Startup class:

[assembly: OwinStartup(typeof(Startup))]
namespace Books
{
    public class Startup
    {
        public static void Main(string[] args)
        {
            const int port = 2746;
            var url = $"http://localhost:{port}/";

            using (WebApp.Start<Startup>(new StartOptions(url) { ServerFactory = "Microsoft.Owin.Host.HttpListener" }))
            {
                var client = new HttpClient { BaseAddress = new Uri(url) };
                Console.ReadLine();
            }
        }

        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration httpConfiguration = new HttpConfiguration();
            WebApiConfig.Register(httpConfiguration);
            app.Use<CustomExceptionMiddleware>().UseWebApi(httpConfiguration);
            app.UseFileServer(StaticFileConfig.Build());
        }
    }
}

我在 web.config 中也有这个:

<add key="owin:AutomaticAppStartup" value="false" />

使用两个项目:

  1. 为 api 控制器创建一个网络项目。这个项目可以在 iis 中托管
  2. 再创建一个console项目作为self-host,这个项目需要引用web项目,现在可以分享WebApiConfig/Controllers到这个项目

ps:OwinStartup 属性表示 iis 的入口点,但我使用传统的 global.asax 来初始化 api 配置。这样 Startup class 也可以共享来自 WebApiConfig

的配置