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 中运行?
public static IWebHost BuildWebHost(string[] args) =>\n WebHost.CreateDefaultBuilder(args)\n .UseStartup<Startup>()\n .Build();\nRun Code Online (Sandbox Code Playgroud)\n\n这是启动并运行 ASP.NET Core 应用程序所需的默认代码。这基本上所做的是使用通常的默认值创建一个 Web 主机,配置 Startup 类,然后构建 Web 主机。Web 主机实际上是为您的 Web 应用程序提供服务的。
\n\n您可以看一下实现,CreateDefaultBuilder但根据您遇到的实际问题来判断,这不会对您有很大帮助。
\n\n\n为什么它需要同时在 IdentityServer4 和 Api 中运行?
\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| 归档时间: |
|
| 查看次数: |
6135 次 |
| 最近记录: |