尝试了解 CreateDefaultBuilder

Kir*_*eed 0 c# dependency-injection asp.net-core identityserver4

我是编写 C# Api 的新手,正在查看 IdentityServer4 QuickStart1 我发现 QuickstartIdentityServer 模块具有

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace QuickstartIdentityServer
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Title = "IdentityServer";

            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}
Run Code Online (Sandbox Code Playgroud)

并且API有

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace Api
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.Title = "API";

            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法理解 BuildWebHost 的实际用途以及为什么我需要它在 2 个单独的进程中运行,然后才能使用客户端进程连接到 API

我看到 BuildWebHost 包含

WebHost.CreateDefaultBuilder
Run Code Online (Sandbox Code Playgroud)

查看 Microsoft.AspNetCore (来自元数据)我发现它是一个包含方法声明的静态类

public static IWebHostBuilder CreateDefaultBuilder(string[] args);
Run Code Online (Sandbox Code Playgroud)

因此该方法的实际代码必须位于 Microsoft.AspNetCore.Dll 中

为什么它需要在 IdentityServer4 和 Api 中运行?

pok*_*oke 6

public static IWebHost BuildWebHost(string[] args) =>\n    WebHost.CreateDefaultBuilder(args)\n        .UseStartup<Startup>()\n        .Build();\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是启动并运行 ASP.NET Core 应用程序所需的默认代码。这基本上所做的是使用通常的默认值创建一个 Web 主机,配置 Startup 类,然后构建 Web 主机。Web 主机实际上是为您的 Web 应用程序提供服务的。

\n\n

您可以看一下实现CreateDefaultBuilder但根据您遇到的实际问题来判断,这不会对您有很大帮助。

\n\n
\n

为什么它需要同时在 IdentityServer4 和 Api 中运行?

\n
\n\n

Identity Server 示例在这里所做的事情是将 Identity Server 和 API 放在不同的服务器上。这在技术上是不必要的,您可以将它们托管在同一应用程序中。然而,在实践中,更有可能的是,您在某个中心位置部署一次身份服务器,然后您可能有多个其他服务器\xe2\x80\x94API、客户端、任何\xe2\x80\x94,这些服务器使用该服务器作为外部身份验证提供商。

\n\n

因此,他们正在创建单独的 Web 主机,因为它们是单独的 Web 应用程序。它们是在单独的 .NET 项目中创建的单独的 Web 应用程序。

\n\n

如果您仔细阅读快速入门教程,您会注意到他们实际上确实为此创建了单独的项目。单独的 ASP.NET Core 项目意味着单独的 Web 应用程序,每个应用程序都单独托管。

\n