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 证书。