一、跨域设置
微软官网介绍:
docs.microsoft.com/zh-cn/aspne…
关于跨域: 协议、域名、端口有一个不同都会出现跨域问题,
在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);
二、项目分层
1、基本的三层架构:
视图层: 负责与前端交互
业务层: 处理视图和数据层之间交互的逻辑
数据访问层: 访问数据库
右键解决方案管理器 -->添加新项目 --> 创建类库:
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类
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状态码则成功。
连接数据库查看,已经创建了一个users表。