ASP.NET Core基础知识(一)【概述】

ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器。 Main 方法是应用的托管入口点:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

.NET Core 主机:

  • 加载 .NET Core 运行时。
  • 使用第一个命令行参数作为包含入口点 (Main) 的托管二进制文件的路径,并开始执行代码。

Main 方法调用 WebHost.CreateDefaultBuilder,后者按照生成器模式来创建 Web 主机。 生成器包含定义 Web 服务器(例如,UseKestrel)和启动类 (UseStartup) 的方法。 在前面的例子中,自动分配了 Kestrel Web 服务器。 ASP.NET CoreWeb 主机尝试在 Internet Information Services (IIS)(若有)上运行。 对于其他 Web 服务器(如 HTTP.sys),可通过调用相应的扩展方法来使用。 启动部分进一步介绍了 UseStartup

IWebHostBuilderWebHost.CreateDefaultBuilder 调用的返回类型,它提供了许多可选方法。 其中的一些方法包括用于在 HTTP.sys 中托管应用的 UseHttpSys,以及用于指定根内容目录的 UseContentRootBuildRun 方法生成 IWebHost 对象,该对象托管应用并开始侦听 HTTP 请求。

启动

WebHostBuilder 上的 UseStartup 方法为你的应用指定 Startup 类:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

Startup 类用于在其中配置应用所需的任何服务和定义请求处理管道。 Startup 类必须是公共类,通常包含以下方法。Startup.ConfigureServices 是可选的。

public class Startup
{
    // This method gets called by the runtime. Use this method
    // to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method
    // to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
    }
}

ConfigureServices 定义应用所使用的服务(如 ASP.NET Core MVC、Entity Framework Core 和标识)。 Configure 定义在请求管道中调用的中间件。

有关更多信息,请参见ASP.NET Core 中的应用启动

内容根

内容根是应用所使用的任何内容的基路径,如 Razor PagesMVC 视图和静态资产。 默认情况下,内容根位置与用于托管应用的可执行文件的应用基路径相同。

Web 根 (webroot)

应用的 webroot 是项目中的目录,其中包含公共资源、CSS 等静态资源、JavaScript 和图形文件。 wwwroot 默认为 webroot

对于 Razor (.cshtml) 文件,波浪号斜杠 ~/ 指向 webroot。 以 ~/ 开头的路径称为虚拟路径。

依赖关系注入(服务)

服务是应用中常用的组件。 可以通过依存关系注入 (DI) 来获取服务。 ASP.NET Core 包括默认支持构造函数注入的本机控制反转 (IoC) 容器。 可根据需要替换默认容器。 DI 除了具备松散耦合优势以外,还可以使服务(例如日志记录)在整个应用中可用。

有关更多信息,请参见在 ASP.NET Core 依赖注入

中间件

ASP.NET Core 中,使用中间件来撰写请求管道。 ASP.NET Core 中间件在 HttpContext 上执行异步操作,然后调用管道中的下一个中间件或终止请求。

按照惯例,通过在 Configure 方法中调用 UseXYZ 扩展方法,向管道添加名为“XYZ”的中间件组件。

ASP.NET Core 包含一组丰富的内置中间件,你也可以编写自己的自定义中间件。 ASP.NET Core 应用中支持 .NET 的开放 Web 接口 (OWIN),它将 Web 应用与 Web 服务器分离。

有关详细信息,请参阅 ASP.NET Core 中间件ASP.NET Core中 .NET 的开放 Web 接口 (OWIN)

启动 HTTP 请求

IHttpClientFactory 可访问 HttpClient 实例以发出 HTTP 请求。

有关更多信息,请参见启动 HTTP 请求

环境

环境(如“开发”环境和“生产”环境)是 ASP.NET Core 的高级概念,可使用环境变量、设置文件和命令行参数进行设置。

有关更多信息,请参见在 ASP.NET Core 中使用多个环境

宿主

ASP.NET Core 应用可配置和启动一个主机,负责应用启动和生存期管理。

有关更多信息,请参见ASP.NET Core 中的 Web 主机和通用主机

服务器

ASP.NET Core 托管模型不直接侦听请求。 托管模型依赖 HTTP 服务器实现将请求转发到应用。

ASP.NET Core 提供以下服务器实现:

  • Kestrel 服务器是跨平台托管 Web 服务器。 Kestrel 通常使用 IIS 在反向代理配置中运行。 在 ASP.NET Core 2.0 或更高版本中,Kestrel 也可作为面向公众的边缘服务器运行,直接向 Internet 公开。
  • IIS HTTP 服务器 (IISHttpServer) 是 IIS 的进程内服务器。
  • HTTP.sys 服务器是 Windows 上适用于 ASP.NET CoreWeb 服务器。

有关更多信息,请参见ASP.NET Core 中的 Web 服务器实现

配置

ASP.NET Core 基于名称/值对使用配置模型。 配置模型不基于 System.Configurationweb.config。配置从一组有序的配置提供程序获取设置。 内置配置提供程序支持各种文件格式(XML、 JSON、INI)、环境变量和命令行参数。 也可以编写你自己的自定义配置提供程序。

有关更多信息,请参见ASP.NET Core 中的配置

日志记录

ASP.NET Core 支持适用于各种日志记录提供程序的日志记录 API。 内置提供程序支持向一个或多个目标发送日志。 可使用第三方记录框架。

有关更多信息,请参见ASP.NET Core 中的日志记录

错误处理

ASP.NET Core 的内置方案可处理应用中的错误,包括开发人员异常页、自定义错误页、静态状态代码页和启动异常处理。

有关更多信息,请参见处理 ASP.NET Core 中的错误

路由

ASP.NET Core 提供将应用请求路由到路由处理程序的方案。

有关更多信息,请参见ASP.NET Core 中的路由

后台任务

后台任务作为托管服务实现。 托管服务是一个类,具有实现 IHostedService 接口的后台任务逻辑。

有关更多信息,请参见在 ASP.NET Core 中使用托管服务实现后台任务。

访问 HttpContext

Razor PagesMVC 处理请求时,HttpContext 自动可用。当 HttpContext 不可立即使用时,可通过 IHttpContextAccessor 接口及其默认实现 HttpContextAccessor 访问 HttpContext

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值