ASP.NET Core基础知识概述(二)

本文章翻译自微软官方文档: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/?view=aspnetcore-7.0&tabs=windows

目录
ASP.NET Core基础知识概述(一)
ASP.NET Core基础知识概述(二)
ASP.NET Core基础知识概述(三)

服务器(Servers)

ASP.NET Core应用使用HTTP server实现对HTTP请求的监听。服务器对应用的请求在表面上呈现为一组由 HttpContext 组成的请求功能。

对Windows操作系统来说

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

  • Kestrel是一个跨平台的web服务器。Kestrel通常运行在配置了方向代理的IIS中。在ASP.NET Core 2.0或更高版本中,Kestrel可直接作为面向公众的边界服务并直接向Internet公开。
  • IIS HTTP 服务器适用于使用 IIS 的 Windows。借助此服务器,ASP.NET Core应用和IIS运行在同一进程中。
  • HTTP.sys是适用于不与 IIS 一起使用的 Windows 的服务器。

对macOS及Linux操作系统来说
ASP.NET Core提供Kestrel跨平台服务器的实现。在ASP.NET Core 2.0或更高版本中,Kestrel可直接作为面向公众的边界服务并直接向Internet公开。Kestrel通常运行在配置了方向代理的 Nginx 或Apache中。

配置(Configuration)

ASP.NET Core 提供了一个配置框架,这个框架可以从配置提供程序的有序集中获取或设置键值对。内置的配置提供程序支持很多配置源,比如json文件、xml文件、环境变量和命令行参数。也可以自定义配置提供程序以支持其他配置源。

默认情况下,ASP.NET Core会从appsettings.json文件、环境变量及命令行等中读取配置。当应用程序的配置已加载,环境变量中的配置将会覆盖appsettings.json文件中的配置。

环境(Environments)

运行环境(比如Development、Staging和Production)在ASP.NET Core中是可使用的。通过设置ASPNETCORE_ENVIRONMENT环境变量来指定应用的运行环境。ASP.NET Core在应用启动是读取该环境变量并存储在IWebHostEnvironment的实现中。通过依赖注入(DI),此实现可在应用的任何地方使用。

一下代码示例中实现通过判断不是Development环境来配置异常处理(exception handler)及 HTTP Strict Transport Security Protocol (HSTS) 中间件:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

app.MapGet("/hi", () => "Hello!");

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

日志(Logging)

ASP.NET Core 支持适用于各种内置和第三方Logging提供程序的Logging API。包括以下Logging提供程序:

  • Console
  • Debug
  • Event Tracing on Windows
  • Windows Event Log
  • TraceSource
  • Azure App Service
  • Azure Application Insights

想要记录日志,可以从DI中解析 ILogger<TCategoryName>服务并调用Logging的相关方法,比如LogInformation方法。看以下代码示例:

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;
    private readonly ILogger<IndexModel> _logger;

    public IndexModel(RazorPagesMovieContext context, ILogger<IndexModel> logger)
    {
        _context = context;
        _logger = logger;
    }

    public IList<Movie> Movie { get;set; }

    public async Task OnGetAsync()
    {
        _logger.LogInformation("IndexModel OnGetAsync.");
        Movie = await _context.Movie.ToListAsync();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容