asp.net-core - IWebHost WebHostBuilder BuildWebHost和有什么不一样

标签 asp.net-core asp.net-core-2.0

Microsoft的文档绝对糟糕。
我需要将我开发的.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 Host构建器随后在实际构建Web主机之前对其进行配置。
BuildWebHost是ASP.NET Core 2.1之前的较早约定的一部分,其中Program.cs中的默认模式是使用单独的方法来构建Web主机。在2.1中,对此进行了更改,以便该方法不再直接构建Web主机,而仅创建Web主机构建器(因此该方法现在称为CreateWebHostBuilder)。因此,基本上,Web Host Builder上的.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 startuphosting部分通常介绍了此主题。

关于asp.net-core - IWebHost WebHostBuilder BuildWebHost和有什么不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473282/

相关文章:

linux - 从 LAN 找不到 aspNet 核心 Linux 404

c# - 带有警告和 InvalidOperationException 的 WCF WebService

azure - 从 VS2015 开始将 WebApp 部署到 Azure,实现零停机

c# - 访问 IOption 类中 appsettings.json 文件中存储的键值对

asp.net-core - 将参数传递给 ASP.NET Core 中的部分 View

c# - 如何从相对路径加载c#中的json文件?

css - 图像未出现在 Asp.Net Core

c# - 在 Startup.cs 中生成角色在 .NET Core 2.0 中不再起作用

c# - asp.net core 2.0 中的 WCF 服务凭据

c# - ASP.Net & EF Core 2 和并发 token 错误