.NET 6(Core)步步学-Program.cs 与 Startup.cs

作者:vkvi 来源:ITPOW(原创) 日期:2022-3-31

Program.cs

每一个 ASP.NET Core 应用程序,都是一个独立的控制台程序,可以不依托 IIS 运行(因为要跨平台嘛)。所以我们会发现之前控制台程序中熟悉的 Program.cs。

以前的 Program.cs 总有个 Main 函数,.NET 6 中没有了 Main 函数(.NET 6 是本文发布时的 .NET Core 最新正式版本)

这些人思维还是比较活的,为什么要 Main 函数,就不能直接写在里面?

还有 namespace 也是一样的道理,为什么 namespace 要花括号?就不能直接写,表示整页都是这个命名空间。

这种没有 Main 函数的写法,叫“顶级语句”,一个项目只能有一个包含顶级语句的文件。

// WebApplication 表示整个 Web 应用程序。
var builder = WebApplication.CreateBuilder(args);

// 添加各种服务到容器,这里只添加一个。
builder.Services.AddControllers();

// 这里就是实例化了,没有采用微软模式的 new,而采用反微软模式人群爱用的 Build。
var app = builder.Build();

// HTTP 访问自动重定向到 HTTPS。
app.UseHttpsRedirection();

// 启用权限验证。
app.UseAuthorization();

// 咱们 Web API 需要映射 Controller。
app.MapControllers();

app.Run();

Startup.cs

而且我们会发现,默认没有了 Startup.cs,因为这些代码都是直接写在 Program.cs 中的了。

如果你要说我就要 Startup.cs 怎么写呢?

public class ItpowStartup
{
    public IConfiguration Configuration { get; }


    public ItpowStartup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    }


    public void Configure(WebApplication app, IWebHostEnvironment env)
    {
        if (!env.IsDevelopment())
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }
        
        app.UseHttpsRedirection();

        app.UseAuthorization();

        app.MapControllers();
    }
}

Program.cs

var builder = WebApplication.CreateBuilder(args);

var startup = new ItpowStartup(builder.Configuration);
startup.ConfigureServices(builder.Services);

var app = builder.Build();
startup.Configure(app, app.Environment);
app.Run();

你会发现,啥 Startup 呀,其实就是把 Program.cs 中的代码包装了一下,我名称爱咋起都可以,我方法爱咋写都可以,一样运行。

请参见:Migrate from ASP.NET Core 5.0 to 6.0 | Microsoft Docs

题外,上面有个词 UseHsts,就是说非开发环境,强制使用 HTTPS。HSTS:HTTP Strict Transport Security,HTTP 严格传输安全。有这个,表示网站只接受 HTTPS。 按照约定,如果一个网站声明了 HSTS 策略,浏览器必须拒绝所有的 HTTP 连接并阻止用户接受不安全的 SSL 证书。

相关文章