.net6 webapi 项目搭建(二、跨域和项目分层)

864 阅读3分钟

一、跨域设置

微软官网介绍:

docs.microsoft.com/zh-cn/aspne…

关于跨域: 协议、域名、端口有一个不同都会出现跨域问题,

Snipaste_2022-06-27_13-08-59.png

Snipaste_2022-06-27_13-50-46.png

在program.cs中代码配置

var MyAllowSpecificOrigins = "_MyAllowSubdomainPolicy";
//配置跨域
builder.Services.AddCors(options => options.AddPolicy(MyAllowSpecificOrigins,
    builder =>
    {
        builder.AllowAnyMethod()
            .AllowAnyHeader()
            .SetIsOriginAllowed(_ => true) // =AllowAnyOrigin()
            .AllowCredentials();
    })
);
#endregion
app = builder.Build();
//跨域
app.UseCors(MyAllowSpecificOrigins);

Snipaste_2022-06-27_13-53-14.png

二、项目分层

1、基本的三层架构:

视图层: 负责与前端交互 
业务层: 处理视图和数据层之间交互的逻辑
数据访问层: 访问数据库

右键解决方案管理器 -->添加新项目 --> 创建类库:

Snipaste_2022-06-19_22-45-42.png

Common放一些常用的工具类或者其他;

Repository负责与数据库交互;

Services处理业务逻辑;

2、引入Sqlsugar

Sqlsugar是一个国内开发的一个ORM框架,详细的介绍看官网:www.donet5.com/Home/Doc?ty…

接着引入Sqlsugar包,官网写的非常详细了

官网教程:https://www.donet5.com/Home/Doc?typeId=1226

在主项目下创建一个Extensions文件夹和SqlsugarSetup类

using SqlSugar;

namespace skuMall
{
    public static class SqlsugarSetup
    {
        public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration,
    string dbName = "db_master")
        {
            SqlSugarScope sqlSugar = new SqlSugarScope(new ConnectionConfig()
            {
                //这里是要连接的数据库,大部分主流数据库都支持
                DbType = SqlSugar.DbType.MySql,
                ConnectionString = configuration[dbName],
                IsAutoCloseConnection = true,
            },
                db =>
                {
                //单例参数配置,所有上下文生效
                db.Aop.OnLogExecuting = (sql, pars) =>
                    {
                    //Console.WriteLine(sql);//输出sql
                };
                });
            services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton
        }
    }
}

在appSettings.json里面配置数据库连接字符串

"db_master": "server=localhost;Database=skuMall;Uid=root;Pwd=123456789;",

然后在Program.cs里面

//扩展方法,执行的是Extensions下面的SqlsugarSetup.AddSqlsugarSetup方法
builder.Services.AddSqlsugarSetup(builder.Configuration);

3、引入AutoFac

AutoFac是一个控制反转容器,官网:autofac.org/

更详细的介绍看官网会了解的更清楚。

#region Autofac依赖注入
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

var hostBuilder = builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
{
    //注册Services, 这里的skuMall.Services是项目中对应的类库名, 必须引用改项目
    var assembly = Assembly.Load("skuMall.Services");
    //通过反射来找到所有带Service名字的类来注册
    builder.RegisterAssemblyTypes(assembly).Where(a => a.Name.EndsWith("Service")).AsSelf();

    //注册Repository
    var assemblysRepository = Assembly.Load("skuMall.Repository");
    builder.RegisterAssemblyTypes(assemblysRepository).Where(a => a.Name.EndsWith("Repository")).AsSelf();
});
#endregion 

添加项目引用

右键选中主项目,选择添加 --> 添加项目引用:

主项目引用Services层,Services引用Repository层就可以了

遇到报错的,Alt + Enter 安装对应的包就好了。

4、测试

在WeatherForecastController或者新建个控制器来测试

新建个类库Domain来放置实体类,并创建Users类

Snipaste_2022-06-20_00-07-44.png

using SqlSugar;

namespace SkuMall.Domain
{
    [SugarTable("Users")]
    public class Users
    {
        /// <summary>
        /// 用户Id
        /// </summary>
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//数据库是自增才配自增 
        public int Id { get; set; }

        /// <summary>
        /// 店铺Id 
        /// </summary>
        [SugarColumn(ColumnDataType = "int")]
        public int ShopId { get; set; }

        /// <summary>
        /// 用户名
        /// </summary>
        [SugarColumn(ColumnDataType = "Nvarchar(8)")]
        public string UserName { get; set; } = "";

        /// <summary>
        /// 账号
        /// </summary>
        [SugarColumn(ColumnDataType = "Nvarchar(20)")]
        public string Account { get; set; } = "";

        /// <summary>
        /// 密码
        /// </summary>
        [SugarColumn(ColumnDataType = "Nvarchar(20)")]
        public string Password { get; set; } = "";

    }
}

控制器构造函数中获取到ISqlSugarClient对象

        ISqlSugarClient db;
        public WeatherForecastController(ISqlSugarClient db)
        {
            this.db = db;
        }

编写一个get请求测试创建users表(实际项目中一般不会这样做,这儿是测试使用)

        /// <summary>
        /// 测试创建user表
        /// </summary>
        [HttpGet]
        public void CreatedUserTable()
        {
            //这句代码是创建数据库,如果本地没有数据库就执行这句代码
            //db.DbMaintenance.CreateDatabase();
            db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Users));
        }

运行try一下,返回200状态码则成功。

Snipaste_2022-06-20_00-12-45.png

连接数据库查看,已经创建了一个users表。