微软的文档非常糟糕。我需要将我开发的.net core 2 Web应用程序部署到IIS服务器,我无法直接回答任何问题。这只是我提问的开始。
IWebHost,WebHostBuilder,BuildWebHost有什么区别?
谢谢!
首先,让我先说一下我非常不同意你的陈述:ASP.NET Core的文档实际上非常好。是的,它可能仍然缺乏一些细节,它也有一些问题赶上发布的变化,但总体来说内容非常好,而且正在努力的团队真的做得非常出色。为这么大且快速移动的框架编写文档真的很难,而且通过文档获得的信息量实际上非常好。一旦你克服了从新框架开始的初始问题,你可能会认识到这一点。
但回到你的问题:
IWebHost
:Web主机是托管和运行Web应用程序的一般方式。它在应用程序启动时创建,然后它将构建所有必需的部分,如Kestrel Web服务器,应用程序中间件管道和所有其他位,并连接它们,以便您的应用程序准备好为您的请求提供服务。
Web主机基本上就是构成Web应用程序的东西。IWebHostBuilder
:Web主机构建器基本上是一个创建Web主机的工厂。这是构建Web主机的东西,但也配置了Web主机确定如何运行Web应用程序所需的所有必需位。
使用ASP.NET Core 2,您通常会创建一个“默认Web主机构建器”,它已经有很多默认值。例如,默认Web主机将设置Kestrel Web服务器,启用和配置日志记录,并添加对appsettings.json
配置的支持。
通常,您的应用程序将始终以这样的默认Web主机启动,然后您只需使用Web主机构建器随后在实际构建之前配置Web主机。BuildWebHost
是ASP.NET Core 2.1之前的旧约定的一部分,其中Program.cs
中的默认模式是在单独的方法中构建Web主机。使用2.1,这已被更改,以便该方法不再直接构建Web主机,而只是创建Web主机构建器(因此该方法现在称为CreateWebHostBuilder
)。所以基本上,对web主机构建器的.Build()
调用是从方法中重构的。你可以在migration guide for 2.0 to 2.1中看到这个。
这样做的原因是使CreateWebHostBuilder
可重复使用。在该方法中发生的构建器配置基本上是配置Web主机所需的一切。因此,通过使其可重用,而不生成实际创建的Web主机,它可以用于其他目的。在这种情况下,这是使用TestHost
进行集成测试。测试主机基本上将在内部托管Web主机以进行集成测试,并且它将通过查找CreateWebHostBuilder
方法来实现。现在,您在ASP.NET Core 2.1之后在Program.cs
中看到的默认模式如下(我添加的注释用于进一步说明):
public class Program
{
// main entry point for your application
public static void Main(string[] args)
{
// create the web host builder
CreateWebHostBuilder(args)
// build the web host
.Build()
// and run the web host, i.e. your web application
.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
// create a default web host builder, with the default settings and configuration
WebHost.CreateDefaultBuilder(args)
// configure it to use your `Startup` class
.UseStartup<Startup>();
}
顺便说一句。这个主题通常包含在官方文档的application startup和hosting部分。