最近在做.net8的环境升级,但是Program.cs和StartUp文件还保留着.net core 3.1的框架。
做了个简单的对应,本文是为了尽快升级,类似操作流程,详细的深挖过程后续会更新。
下面对比一下.net6以前的Program.cs和StartUp文件和以后的代码
Program.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace NameWebAPI
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
StartUp.cs
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
}
}
.net6采用了新的框架将Program.cs和StartUp文件合到一起,包括但不限于使用了C#顶级语法,隐式全局指令等.net6发布的中断性变更的技术
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();//权限
app.MapHealthChecks("");//配置健康检查
app.MapControllers();
app.UseCors("AllowAllApi");
app.Run();//运行
下面对比一下需要变化的地方
.net6之前 | .net6 |
IServiceCollection services | builder.Services |
IConfiguration configuration | builder.Configuration |
IApplicationBuilder app | var app = builder.Build(); |
IHostingEnvironment env env.IsDevelopment() | app.Environment.IsDevelopment() |
值得注意的是
供应用程序撰写的服务集合,使用的builder.Services.AddXXXX()方法
中间件的添加,使用的是var app = builder.Build();创建的IApplicationBuilder app实例对象
app.Run()在.net6.0的框架中代表的是Program.cs和StartUp文件执行的最后一步,代表程序已经准备好运行了。