随着技術的不斷拓展更新,我們所使用的技術也在不斷地更新優化,項目的架構也在不斷地更新,本次講解 .net core 2.1 更新到3.1所需要注意的事項;
當項目架構更新後,所有的Nuget引用也會對應變化,這些根據自己的架構所使用的技術對應做更新即可,這裡不做過多贅述;
其次就是要修改 Program.cs 檔案,這裡把修改前的和修改後的統一貼出代碼做調整,代碼如下:
2.1版本的檔案代碼:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using System;
namespace S2_Xxxx_XxxNetApi
{
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
Console.WriteLine("接口啟動成功");
// QuartzHelper.ExecuteInterval<Test>(200);
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
//.UseUrls("http://*:5000")//釋出時需要注釋
.UseStartup<Startup>();
}
}
3.1版本的檔案代碼
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System;
namespace S2_Cggc_PmsNetApi
{
/// <summary>
/// 啟動
/// </summary>
public class Program
{
/// <summary>
/// 啟動
/// </summary>
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
Console.WriteLine("接口啟動成功");
}
/// <summary>
/// 啟動
/// </summary>
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
然後就是Startup檔案,代碼如下:
2.1版本檔案代碼:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Quartz.Impl;
using S2_Xxxx_XxxNetApi;
using System.Linq;
namespace S2_Xxxx_XxxNetApi
{
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;
});
//排程任務注冊
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();//注冊ISchedulerFactory的執行個體。
string conn = Configuration.GetSection("AppSettings:ConnectString").Value;
MySqlHelper.Conn = conn;
string orclconn = Configuration.GetSection("AppSettings:OrclConnectString").Value;
OracleHelper.connectionString = orclconn;
string redisconn = Configuration.GetSection("AppSettings:RedisConnectString").Value;
RedisHelper.SetCon(redisconn);
RedisHelper.BuildCache();
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
//跨域支援
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
corsBuild => corsBuild.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDistributedMemoryCache();//啟用session之前必須先添加記憶體
//services.AddSession();
services.AddSession(options =>
{
options.Cookie.Name = ".AdventureWorks.Session";
options.IdleTimeout = System.TimeSpan.FromSeconds(1200);//設定session的過期時間
options.Cookie.HttpOnly = true;//設定在浏覽器不能通過js獲得該cookie的值
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info
{
Version = "v1",
Title = "接口文檔"
});
options.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
});
}
// 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");
//app.usehets();
}
app.UseSession();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI文檔");
});
//跨域支援
app.UseCors("CorsPolicy");
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
3.1版本檔案代碼:
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Quartz;
using Quartz.Impl;
using System;
namespace S2_Cggc_PmsNetApi
{
/// <summary>
/// 啟動
/// </summary>
public class Startup
{
/// <summary>
/// 啟動
/// </summary>
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
/// <summary>
/// 啟動
/// </summary>
public IConfiguration Configuration { get; }
/// <summary>
/// 啟動
/// </summary>
public void ConfigureServices(IServiceCollection services)
{
//啟用session之前必須先添加記憶體
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.Cookie.Name = ".AdventureWorks.Session";
options.IdleTimeout = System.TimeSpan.FromSeconds(1200);//設定session的過期時間
options.Cookie.HttpOnly = true;//設定在浏覽器不能通過js獲得該cookie的值
});
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;//這裡要改為false,預設是true,true的時候session無效
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie();
services.AddCors(options =>
{
options.AddPolicy("any", builder => { builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader(); });
});
//注冊過濾器
services.AddSingleton<ApiResultFilterAttribute>();
services.AddSingleton<ApiExceptionFilterAttribute>();
services.AddMvc(
config =>
{
config.EnableEndpointRouting = false;
config.Filters.AddService(typeof(ApiResultFilterAttribute));
config.Filters.AddService(typeof(ApiExceptionFilterAttribute));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson();
//services.AddMvc(options => { options.Filters.Add<ResultFilterAttribute>(); });
services.AddSwaggerDocument(); //注冊Swagger 服務
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
//排程任務注冊
services.AddSingleton<ISchedulerFactory, StdSchedulerFactory>();//注冊ISchedulerFactory的執行個體。
QuartzHelper.AddJobForSeconds<Deduction>();
QuartzHelper.Start();
}
/// <summary>
/// 啟動
/// </summary>
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSession();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseCors("any");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
app.UseOpenApi(); //添加swagger生成api文檔(預設路由文檔 /swagger/v1/swagger.json)
app.UseSwaggerUi3();//添加Swagger UI到請求管道中(預設路由: /swagger).
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes => { routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
}
}
}
做了對應調整後,編譯後檢查是否還有錯誤提示,即可更新成功,可能有些控制器裡面的屬性寫法也會有些變化,這個還沒有具體深入研究,歡迎小夥伴們做補充,我将虛心接受大家的意見,感謝~