ASP.NET Core搭建多层网站架构【5.1-WebCore网站核心配置】

2020/01/29, ASP.NET Core 3.1, VS2019

摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【5.1-WebCore网站核心配置】
统一封装网站核心配置,注册跨域策略,实例化雪花算法,后期可扩展添加多语言支持

文章目录

此分支项目代码

本章节介绍了统一封装网站核心配置,注册跨域策略,实例化雪花算法,后期可扩展添加多语言支持

添加网站配置及跨域配置

MS.WebApi应用程序appsettings.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"
    }
}

添加完成后,如下图所示:

说明:

  • WorkerId、DataCenterId是雪花算法的两个参数
  • LoginFailedCountLimits是用户登录失败的次数限制
  • LoginLockedTimeout是用户锁定后,多久可以重新登录
  • AllowOrigins中是允许跨域的源,逗号分隔

SiteSetting网站配置实体类

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类库中添加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;
        }
    }
}

说明:

  • 封装了跨域策略AddCorsPolicy
  • 绑定appsetting中的SiteSetting
  • 实例化雪花算法IdWorker并注册为单例(保证全局只有一个单例)

使用

MS.WebApi应用程序Startup.cs类中,ConfigureServices方法里添加以下代码:

//using MS.WebCore;
//添加以上代码至using引用
//注册跨域策略
services.AddCorsPolicy(Configuration);
//注册webcore服务(网站主要配置)
services.AddWebCoreService(Configuration);

完成后代码如下图所示

至此,WebCore核心配置完成,此时网站项目已支持跨域配置,已可以通过ioc解析SiteSetting读取网站配置和IdWorker生成雪花ID

项目完成后,如下图所示

原文地址:https://www.cnblogs.com/kasnti/p/12239496.html

时间: 2024-07-29 22:30:39

ASP.NET Core搭建多层网站架构【5.1-WebCore网站核心配置】的相关文章

ASP.NET Core搭建多层网站架构【1-项目结构分层建立】

2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[1-项目结构分层建立] 文章目录 此分支项目代码 此章节介绍了本项目的分层结构,建立了各层级的类库,修改网站项目的启动配置 新建解决方案 新建空白解决方案MSDemo 建立以下解决方案文件夹: 一个解决方案文件夹相当于一个层级,解决方案下是src和tests.而src下分了七个层级,并且每个层级向上依赖,不会出现2.WebCore中的内容依赖5.

ASP.NET Core搭建多层网站架构【2-公共基础库】

2020/01/28, ASP.NET Core 3.1, VS2019, Snowflake雪花算法ID, Enum枚举方法扩展, Lambda方法扩展, Json方法封装 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[2-公共基础库] Snowflake雪花算法ID.Enum枚举方法扩展.Lambda方法扩展.Json方法封装 文章目录 此分支项目代码 本章节介绍了MS.Common类库中一些常用公共方法,可以自行添加自己积累的一些库 添加包引用 向MS.Co

ASP.NET Core搭建多层网站架构【4.1-网站数据库实体设计及映射配置】

2020/01/28, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[4.1-网站数据库实体设计及映射配置] 文章目录 此分支项目代码 本章节介绍后台管理的网站数据库实体设计 需求分析 首先要实现的功能有用户登录.角色管理.日志记录 大概有四张表:用户表.密码表.角色表.日志表 日志表: 用户表: 密码表: 角色表: 好像博客园md不支持表格功能?所以只能截图展示,excel表格上传至项目docs文件夹中 字段设计

ASP.NET Core搭建多层网站架构【3-使用xUnit编写单元测试之简单方法测试】

2020/01/28, ASP.NET Core 3.1, VS2019, xUnit 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[3-使用xUnit编写单元测试之简单方法测试] 文章目录 此分支项目代码 上一章节已经建立了Common公共类库,本章节介绍编写简单的单元测试,对上一章节的公共类库中EnumExtension方法编写单元测试,同时也是介绍上一章节中公共类库EnumExtension的使用方法 新建测试项目 在tests解决方案文件夹下,新建xUni

ASP.NET Core搭建多层网站架构【4.1-工作单元和仓储设计】

2020/01/28, ASP.NET Core 3.1, VS2019, UnitOfWork, Repository 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[4.1-工作单元和仓储设计] 使用泛型仓储和工作单元模式封装数据访问层基础的增删改查等方法 文章目录 此分支项目代码 关于本章节的工作单元模式: 泛型仓储封装了通用的增删改查方法,由工作单元统一管理仓储以保证数据库上下文一致性. 要获取仓储,都从工作单元中获取,通过仓储改动数据库后,由工作单元进行提

ASP.NET Core搭建多层网站架构【6.2-使用AutoMapper映射实体对象】

2020/01/29, ASP.NET Core 3.1, VS2019, AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[6.2-使用AutoMapper映射实体对象] 用依赖注入的方法使用AutoMapper映射 文章目录 此分支项目代码 本章节介绍了使用AutoMapper映射实体对象的注册部分,用依赖注入的方法使用AutoMapper映射,具体

ASP.NET Core搭建多层网站架构【8-使用AOP动态拦截器进行服务层日志记录】

2020/01/29, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[7-编写角色业务的增删改查] 编写最简单的增删改业务,涉及到DI依赖注入的使用.AutoMapper的使用.工作单元与仓储的使用.雪花Id的生成 文章目录 此分支项目代码 本章节介绍了编写最简单的增删改查业务,涉及到DI依赖注入的使用.AutoMapper的使用.工作单元与仓储的使用 原文地址:https://www.cnblogs.com/ka

ASP.NET Core搭建多层网站架构【8.2-使用Castle.Core实现动态代理拦截器】

2020/01/30, ASP.NET Core 3.1, VS2019, 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[8.2-使用Castle.Core实现动态代理拦截器] 使用Autofac替换原生的依赖注入 文章目录 此分支项目代码 本章节介绍了使用Autofac代替原生的依赖注入,使用Autofac为的是后面配合Castle.Core做AOP动态代理 原文地址:https://www.cnblogs.com/kasnti/p/12244544.html

ASP.NET Core搭建多层网站架构【10-xUnit单元测试之集成测试】

2020/01/31, ASP.NET Core 3.1, VS2019, 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[10-xUnit单元测试之集成测试] 文章目录 此分支项目代码 本章节介绍了 原文地址:https://www.cnblogs.com/kasnti/p/12246180.html