.Net Core升级3.1 问题整理

随着技术的不断拓展更新,我们所使用的技术也在不断地升级优化,项目的框架也在不断地升级,本次讲解 .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?}"); });

}

}

}

做了对应调整后,编译后检查是否还有错误提示,即可升级成功,可能有些控制器里面的属性写法也会有些变化,这个还没有具体深入研究,欢迎小伙伴们做补充,我将虚心接受大家的意见,感谢~

以上是 .Net Core升级3.1 问题整理 的全部内容, 来源链接: www.h5w3.com/122302.html

回到顶部