2020/01/29, ASP.NET Core 3.1, VS2019, NLog.Web.AspNetCore 4.9.0html
摘要:基於ASP.NET Core 3.1 WebApi搭建後端多層網站架構【6-註冊跨域、網站核心配置】
統一封裝網站核心配置,註冊跨域策略,實例化雪花算法,後期可擴展添加多語言支持git
文章目錄github
此分支項目代碼web
本章節介紹了統一封裝網站核心配置,註冊跨域策略,實例化雪花算法,後期可擴展添加多語言支持算法
在MS.WebApi
應用程序appsettings.json
中添加如下節點:json
"SiteSetting": { "WorkerId": 1, //for snowflake workerid "DataCenterId": 1, //for snowflake datacenterid "LoginFailedCountLimits": 3, //the number of login failed "LoginLockedTimeout": 3 //(minutes) account locked timeout }, "Startup": { "Cors": { "AllowOrigins": "http://localhost:8080,http://localhost:8081" } }
添加完成後,以下圖所示:
後端
說明:api
在MS.WebCore
類庫中添加SiteSetting.cs
類:跨域
namespace MS.WebCore { public class SiteSetting { public long WorkerId { get; set; } public long DataCenterId { get; set; } public int LoginFailedCountLimits { get; set; } public int LoginLockedTimeout { get; set; } } }
其中的字段和appsettings.json
中對應,能夠使用選擇性粘貼,將json粘貼爲類架構
向MS.WebCore
類庫添加如下包引用:
<ItemGroup> <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.0" /> </ItemGroup>
這裏引用的是NLog.Web.AspNetCore
包是由於:
MS.WebCore
類庫中添加NLog的一些方法配置,須要依賴此包Microsoft.Extensions.Configuration
、Microsoft.Extensions.DependencyInjection
兩個組件,因此這兩個組件就不須要單獨重複引用了可是這裏我遇到一個問題,若是不使用NLog,可能不須要引用NLog.Web.AspNetCore
包,而直接引用Microsoft.Extensions.Configuration
、Microsoft.Extensions.DependencyInjection
這兩個包
可是我在官網文檔中查到AddCors
方法依賴的就是Microsoft.Extensions.DependencyInjection
這個包,不知道爲何VS一直提示找不到?
若是大家不使用NLog可能須要自行解決下這個問題了~
在MS.WebCore
類庫中添加WebCoreExtensions.cs
類:
using MS.Common.IDCode; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; namespace MS.WebCore { public static class WebCoreExtensions { public const string MyAllowSpecificOrigins = "_myAllowSpecificOrigins"; /// <summary> /// 添加跨域策略,從appsetting中讀取配置 /// </summary> /// <param name="services"></param> /// <param name="configuration"></param> /// <returns></returns> public static IServiceCollection AddCorsPolicy(this IServiceCollection services, IConfiguration configuration) { services.AddCors(options => { options.AddPolicy(MyAllowSpecificOrigins, builder => { builder .WithOrigins(configuration.GetSection("Startup:Cors:AllowOrigins").Value.Split(',')) .AllowAnyHeader() .AllowAnyMethod(); }); }); return services; } /// <summary> /// 註冊WebCore服務,配置網站 /// do other things /// </summary> /// <param name="services"></param> /// <param name="configuration"></param> /// <returns></returns> public static IServiceCollection AddWebCoreService(this IServiceCollection services, IConfiguration configuration) { //綁定appsetting中的SiteSetting services.Configure<SiteSetting>(configuration.GetSection(nameof(SiteSetting))); #region 單例化雪花算法 string workIdStr = configuration.GetSection("SiteSetting:WorkerId").Value; string datacenterIdStr = configuration.GetSection("SiteSetting:DataCenterId").Value; long workId; long datacenterId; try { workId = long.Parse(workIdStr); datacenterId = long.Parse(datacenterIdStr); } catch (Exception) { throw; } IdWorker idWorker = new IdWorker(workId, datacenterId); services.AddSingleton(idWorker); #endregion return services; } } }
說明:
在MS.WebApi
應用程序Startup.cs
類中,ConfigureServices方法裏添加如下代碼:
//using MS.WebCore; //添加以上代碼至using引用 //註冊跨域策略 services.AddCorsPolicy(Configuration); //註冊webcore服務(網站主要配置) services.AddWebCoreService(Configuration);
完成後代碼以下圖所示
在Configure中,UseRouting
和UseAuthorization
之間加上app.UseCors(WebCoreExtensions.MyAllowSpecificOrigins);
以開啓跨域中間件:
至此,WebCore核心配置完成,此時網站項目已支持跨域配置,已能夠經過ioc解析SiteSetting讀取網站配置和IdWorker生成雪花ID
項目完成後,以下圖所示