.Net Core2.2升級.Net Core3.1采坑日記


一、WebApi
1、Swagger的一個小坑(升級Swashbuckle.AspNetCore  4.0.1=>5.2.1)

.Net Core2.2  Startup.cs
 //注冊Swagger生成器,定義一個和多個Swagger 文檔 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "API接口", Description = "接口", Version = "v1" }); // 為 Swagger JSON and UI設置xml文檔注釋路徑 var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//獲取應用程序所在目錄(絕對,不受工作目錄影響,建議采用此方法獲取路徑) var xmlPath = Path.Combine(basePath, "xxx.xml"); c.IncludeXmlComments(xmlPath); });
.Net Core3.1  Startup.cs
 //注冊Swagger生成器,定義一個和多個Swagger 文檔 services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "API接口", Description = "接口", Version = "v1" }); // 為 Swagger JSON and UI設置xml文檔注釋路徑 var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//獲取應用程序所在目錄(絕對,不受工作目錄影響,建議采用此方法獲取路徑) var xmlPath = Path.Combine(basePath, "xxx.xml"); c.IncludeXmlComments(xmlPath); });

2、Json格式設置的坑

.Net Core2.2  Startup.cs
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddControllersAsServices().AddJsonOptions
            (
                json =>
                {
                    //統一設置JsonResult
                    json.SerializerSettings.ContractResolver = new DefaultContractResolver();
                    json.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                }
            );
.Net Core3.1 Startup.cs
添加包 Microsoft.AspNetCore.Mvc.NewtonsoftJson services.AddMvc(option
=> { option.EnableEndpointRouting = false; }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0).AddControllersAsServices().AddNewtonsoftJson ( json => { //統一設置JsonResult json.SerializerSettings.ContractResolver = new DefaultContractResolver(); json.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; } );

二、Web

1、AddMvc的坑

.Net Core2.2
services.AddMvc(option =>
            {
                option.Filters.Add<IdentityAuthorizeFilter>();
                option.Filters.Add<ExceptionFillters>();
            });
.Net Core3.1
services.AddControllersWithViews(option => {
                option.Filters.Add<IdentityAuthorizeFilter>();
                option.Filters.Add<ExceptionFillters>();
            });

2、Autofac的坑,.net core3.1不支持IServiceProvider

.Net Core2.2 Startup.cs
public IServiceProvider ConfigureServices(IServiceCollection services)
        {
           #region 其他設置
           #endregion

            var builder = new ContainerBuilder();
            builder.Populate(services);

            //告訴autofac框架注冊Service層所在程序集中的所有類的對象實例到IService層所在程序集中的所有類的對象實例
            Assembly iserAss = Assembly.Load("CBest.AFS.Interface");
            Assembly serAss = Assembly.Load("CBest.AFS.Service");
            //創建serAss中的所有類的instance以此類的實現接口存儲
            builder.RegisterAssemblyTypes(iserAss, serAss).AsImplementedInterfaces().PropertiesAutowired();//支持構造方式注入和屬性方式注入,不加PropertiesAutowired則只支持構造方式

            //注入到控制器
            var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()
                .Where(type => typeof(Controller).IsAssignableFrom(type)).ToArray();
            builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();
            //創建一個Autofac的容器
            var container = builder.Build();
            return new AutofacServiceProvider(container);
}    

 

.Net Core3.1 Startup.cs中新增以下方法
//依賴注入
        public void ConfigureContainer(ContainerBuilder builder)
        {
            Assembly iserAss = Assembly.Load("XXX.Interface");
            Assembly serAss = Assembly.Load("XXX.Service");
            //創建serAss中的所有類的instance以此類的實現接口存儲
            builder.RegisterAssemblyTypes(iserAss, serAss).AsImplementedInterfaces().PropertiesAutowired();//支持構造方式注入和屬性方式注入,不加PropertiesAutowired則只支持構造方式

            //注入到控制器
            var controllersTypesInAssembly = typeof(Startup).Assembly.GetExportedTypes()
                .Where(type => typeof(Controller).IsAssignableFrom(type)).ToArray();
            builder.RegisterTypes(controllersTypesInAssembly).PropertiesAutowired();
        }

3、授權和身份認證的坑

.Net Core2.2  Program.cs
public static void Main(string[] args)
        {
            NLogBuilder.ConfigureNLog("nlog.config");

            CreateWebHostBuilder(args).UseUrls("http://*:8011").Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                   .UseStartup<Startup>();
.Net Core3.1 Program.cs
public static void Main(string[] args)
        {
            NLogBuilder.ConfigureNLog("nlog.config");
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>().UseUrls("http://*:8011");
                });
.Net Core2.2 Startup.cs Configure函數
app.UseAuthentication()
app.UseMvc(routes => routes.MapRoute(
 name: "default", template: "{controller=Home}/{action=Index}/{id?}"));
.Net Core3.1 Startup.cs Configure函數
app.UseAuthorization();
app.UseAuthentication();
app.UseRouting(); app.UseEndpoints(endpoints
=> { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
.Net Core2.2 
await HttpContext.SignInAsync(pricipal);
.Net Core3.1
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, pricipal);

  await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, pricipal, new AuthenticationProperties()
  {
    IsPersistent = true,//是否持久化
    ExpiresUtc = DateTimeOffset.UtcNow.AddHours(12),//過期時間設置
    AllowRefresh = true //是否允許刷新??
  });

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM