我只是想弄清楚webapi、webhost(iis)和owin之间的关系.我将写下我目前的理解,并请你告诉我它是否正确.
- Webapi,与MVC不同的是,它是以独立于主机的方式编写的.这是在Owin之前的日子里,但显然他们预料到Owin迟早会发生.主机无关性主要意味着在Webapi代码中的任何地方都不使用System.Web.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(Microsoft.Owin.Host.SystemWeb
)的Webhost层,允许在IIS上托管任何与Owin兼容的内容. - 最后一次有Owin个人过来了.它基本上提供了一种抽象,理论上允许在任何主机上托管任何OWIN兼容应用程序,只要OWIN和主机之间存在层即可.owin附带了webhost(
Microsoft.Owin.Host.SystemWeb
)(类似于webhost附带的Webapi),允许在IIS上托管owin应用程序.它还提供了自托管(Microsoft.Owin.SelfHost
)功能,允许在任何可执行文件中托管自己的应用程序.就Webapi而言,owin还为Webapi提供了owin主机(Microsoft.AspNet.WebApi.Owin
),它允许在owin堆栈上运行WebApi.
以上所有情况意味着在IIS上托管Webapi有两种不同的方式.它可以在没有owin的情况下使用Webapi webhost来完成,也可以使用用于Webapi的owin Host和用于owin的webhost来完成.
Nuget参考资料:
- Microsoft.Owin.SelfHost
- Microsoft.Owin.Host.SystemWeb
- Microsoft.AspNet.WebApi.WebHost
- Microsoft.AspNet.WebApi.Owin
这种理解正确吗?