Asp.net Webapi、Webhost和Owin之间的关系

Asp.net Webapi、Webhost和Owin之间的关系,asp.net,.net,iis,asp.net-web-api,owin,Asp.net,.net,Iis,Asp.net Web Api,Owin,我只是想弄清楚webapi、webhost(iis)和owin之间的关系。我将写下我目前的理解,并请你告诉我它是否正确 与MVC不同,Webapi是以独立于主机的方式编写的。这是在奥文之前的日子里,但显然他们预计奥文迟早会发生。主机独立性主要意味着System.Web不在Webapi代码中的任何地方使用。是System.Web完全依赖IIS,没有它就无法工作。这样,Webapi理论上可以在任何地方托管—一旦其他主机可用 Webhost(Microsoft.Owin.Host.SystemWeb

我只是想弄清楚webapi、webhost(iis)和owin之间的关系。我将写下我目前的理解,并请你告诉我它是否正确

  • 与MVC不同,Webapi是以独立于主机的方式编写的。这是在奥文之前的日子里,但显然他们预计奥文迟早会发生。主机独立性主要意味着System.Web不在Webapi代码中的任何地方使用。是System.Web完全依赖IIS,没有它就无法工作。这样,Webapi理论上可以在任何地方托管—一旦其他主机可用
  • Webhost
    Microsoft.Owin.Host.SystemWeb
    Microsoft.AspNet.WebApi.Webhost
    )是介于更高级别API(如WebApi)和IIS之间的一个层。由于Webapi最初是独立于主机的,因此需要一个中间层使其在特定主机(如IIS)上运行。Webhost for Webapi(
    Microsoft.AspNet.Webapi.Webhost
    )提供了此层。稍后还将有Owin的Webhost层(
    Microsoft.Owin.Host.SystemWeb
    ),允许在IIS上托管任何与Owin兼容的内容

  • Owin排在最后一位。它基本上提供了一个抽象,理论上允许在任何主机上托管任何与Owin兼容的应用程序,只要Owin和该主机之间有一个层。Owin随Webhost(
    Microsoft.Owin.Host.SystemWeb
    )而来(类似于Webhost随Webapi而来的方式),允许在IIS上托管Owin应用程序。它还附带了self-host(
    Microsoft.Owin.SelfHost
    ),允许在任何可执行文件中托管Owin应用程序。就Webapi而言,Owin还附带了用于Webapi的Owin主机(
    Microsoft.AspNet.Webapi.Owin
    ),它允许在Owin堆栈上运行Webapi
所有这些都意味着有两种不同的方式在IIS上托管Webapi。可以使用Webapi WebHost在没有Owin的情况下完成,也可以使用Owin Host for Webapi和WebHost for Owin完成

Nuget参考资料:


这种理解正确吗?

您的理解大体正确,但OWIN的角色似乎被误解了。更完整的时间表是:

  • 为描述通用的.NETWeb接口而开发的LaWSGi/Rake/Connect()
  • ASP.NET WebAPI是独立于主机开发的,但随发布
  • Katana项目实现了几个OWIN主机:
  • 已发布OWIN的ASP.NET WebAPI适配器:
  • 你的总结:

    所有这些都意味着有两种不同的方式在IIS上托管Webapi。可以使用Webapi WebHost在没有Owin的情况下完成,也可以使用Owin Host for Webapi和WebHost for Owin完成

    我重申如下:


    所有这些都意味着有两种不同的方式托管WebAPI。它可以在不使用Owin的情况下完成,也可以使用和任何Owin兼容的主机完成。IIS上的托管选项为和。也提供了。

    这种理解正确吗?是的。“因为owin和该主机之间有一个层。”您是指owin兼容应用程序之间,对吗?我要补充的唯一警告是,尝试使用Microsoft.AspNet.WebApi.owin在IIS中托管是错误的,即使大多数示例都使用它-这只是针对自身主机。请参阅Katana项目@PaulHatcher的基本答案,因为您发表了您的评论,在CodePlex的讨论中又发表了一篇文章。它指向一个不同的讨论,其中Katana团队成员指示使用Microsoft.AspNet.WebApi.Owin,因此,要么ASP.NET团队成员的信息有误,而且确实有效,要么他是对的,但效果足够好。(另外,我不是OWIN方面的专家,但说“这个OWIN包只用于这个特定的OWIN主机”对我来说没有意义。)@Stijn嗯,在我删除WebApi之前,我在规模上有很多稳定性问题。OWIN,还有关于修改头的讨论,但是这段对话,也就是源代码,提到了其他与这条路线相关的问题,比如不支持WebAPI属性路由,这一切都有点混乱,没有正典的建议