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

  • Webapi,与MVC不同的是,它是以独立于主机的方式编写的.这是在Owin之前的日子里,但显然他们预料到Owin迟早会发生.主机无关性主要意味着在Webapi代码中的任何地方都不使用System.Web.System.Web完全依赖于IIS,没有它就无法工作.这样,理论上Webapi可以托管在任何地方--只要其他主机可用.
  • Webhost(Microsoft.Owin.Host.SystemWebMicrosoft.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参考资料:

这种理解正确吗?

推荐答案

你的理解大体上是正确的,但OWIN的角色似乎被误解了.更完整的时间表应该是:

  1. OWIN Standard是用来描述通用的.NET web接口,一个la WSGI/Rake/Connect(first commit in 2010).
  2. ASP.NET WebAPI是独立于主机开发的,但发布时附带了https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/个.
  3. Katana项目实现了几个OWIN主机:
  4. ASP.用于OWIN的NET WebAPI适配器发布日期:https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin.

你的总结:

以上所有情况意味着在IIS上托管Webapi有两种不同的方式.它可以在没有owin的情况下使用Webapi webhost来完成,也可以使用用于Webapi的owin Host和用于owin的webhost来完成.

我重申如下:

以上所有这些都意味着托管WebAPI有两种不同的方式.这可以在没有owin的情况下使用WebAPI WebHost来完成,也可以使用OWIN adapter for WebAPI和任何owin兼容的主机来完成.IIS上的托管选项为Microsoft.Owin.Host.IISMicrosoft.Owin.Host.SystemWeb.还提供了Microsoft.AspNet.WebApi.OwinSelfHost.

Asp.net相关问答推荐

调用context.Users和context.Set User有什么区别?

如何处理当前文件中基本文件中的S onClick方法

设置主键时KeyAttribute属性不起作用

如何使用 Get-Process powershell 命令通过端口号获取进程的 ID

在这个 For 循环计数没有增加

在 lambda 表达式中否定 Func

SignalR + Autofac + OWIN:为什么 GlobalHost.ConnectionManager.GetHubContext 不起作用?

Window.Open 使用 PDF 流而不是 PDF 位置

如何在 IISExpress 上使用带有 localhost 的子域?

如何在 ASP.NET 应用程序中使用 jQuery 捕获提交事件?

相当于服务器端的 ASP.NET 包括

如何将 Web 应用程序项目转换为类库项目

ASP.NET 中的 <% %>(嵌入式代码块)

ASP.NET 中的多选下拉列表

SignalR /signalr/hubs 404 未找到

Azure 网站 301 重定向 - 我应该把它放在哪里?

将 MemoryStream 写入响应对象

如何直接在 .aspx 页面中访问 web.config 设置?

ASP.NET 5 (vNext) - 获取配置设置

x-powered by是什么意思?