diff --git a/APIJSON.NET/APIJSON.Data/APIJSON.Data.csproj b/APIJSON.NET/APIJSON.Data/APIJSON.Data.csproj new file mode 100644 index 0000000..8a515d4 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/APIJSON.Data.csproj @@ -0,0 +1,31 @@ + + + + net8.0 + 0.0.11 + + 0.0.11 升级sqlSugarCore版本 解决如果查找字段是关键字(例如:key)时出错的问题 + 0.0.10 处理别名如果为关键字的缺陷 + 0.0.8 清理SelectTable 支持重载 + 0.0.7 修复not in的缺陷,增加~ 不等于的支持 + 0.0.6 增加ToSql接口,处理sql注入的情况 + 通用查询组件 + ApiJson.Common.Core + true + + + + + + + + + + + + + + + + + diff --git a/APIJSON.NET/APIJSON.Data/ApiJsonNetDataModule.cs b/APIJSON.NET/APIJSON.Data/ApiJsonNetDataModule.cs new file mode 100644 index 0000000..8dbe0dc --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/ApiJsonNetDataModule.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; + +namespace APIJSON.Data; +[DependsOn( + typeof(AbpAutofacModule))] +public class ApiJsonNetDataModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + + } +} diff --git a/APIJSON.NET/APIJSON.Data/Data/DbContext.cs b/APIJSON.NET/APIJSON.Data/Data/DbContext.cs new file mode 100644 index 0000000..1f2ab40 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Data/DbContext.cs @@ -0,0 +1,41 @@ +using APIJSON.Data.Models; +using Microsoft.Extensions.Configuration; +using SqlSugar; +using System; +using System.Collections.Generic; +using Volo.Abp.DependencyInjection; +namespace APIJSON.Data; + +public class DbContext:ISingletonDependency +{ + public DbContext(IConfiguration options) + { + Db = new SqlSugarClient(new ConnectionConfig() + { + ConnectionString = options.GetConnectionString("ConnectionString"), + DbType = (DbType)Enum.Parse(typeof(DbType), options.GetConnectionString("DbType")), InitKeyType= InitKeyType.Attribute, + IsAutoCloseConnection = true + }); + Db.Aop.OnLogExecuted = (sql, pars) => //SQL执行完事件 + { + + }; + Db.Aop.OnLogExecuting = (sql, pars) => //SQL执行前事件 + { + + }; + } + public SqlSugarClient Db; + public DbSet LoginDb { get { return new DbSet(Db); } } +} +public class DbSet : SimpleClient where T : class, new() +{ + public DbSet(SqlSugarClient context) : base(context) + { + + } + public List GetByIds(dynamic[] ids) + { + return Context.Queryable().In(ids).ToList(); ; + } +} diff --git a/APIJSON.NET/APIJSON.Data/FuncList.cs b/APIJSON.NET/APIJSON.Data/FuncList.cs new file mode 100644 index 0000000..7acc119 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/FuncList.cs @@ -0,0 +1,43 @@ +using System; +using System.Linq; + +namespace APIJSON.Data; + +/// +/// 自定义方法 +/// +public class FuncList +{ + /// + /// + /// + /// + /// + /// + public string Merge(object a, object b) + { + return a.ToString() + b.ToString(); + } + + /// + /// + /// + /// + /// + /// + public object MergeObj(object a, object b) + { + return new { a, b }; + } + + /// + /// + /// + /// + /// + /// + public bool isContain(object a, object b) + { + return a.ToString().Split(',').Contains(b); + } +} diff --git a/APIJSON.NET/APIJSON.Data/Infrastructure/SimpleStringCipher.cs b/APIJSON.NET/APIJSON.Data/Infrastructure/SimpleStringCipher.cs new file mode 100644 index 0000000..43b09bc --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Infrastructure/SimpleStringCipher.cs @@ -0,0 +1,134 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace APIJSON.Data; + +public class SimpleStringCipher +{ + public static SimpleStringCipher Instance { get; } + + /// + /// This constant string is used as a "salt" value for the PasswordDeriveBytes function calls. + /// This size of the IV (in bytes) must = (keysize / 8). Default keysize is 256, so the IV must be + /// 32 bytes long. Using a 16 character string here gives us 32 bytes when converted to a byte array. + /// + public byte[] InitVectorBytes; + + /// + /// Default password to encrypt/decrypt texts. + /// It's recommented to set to another value for security. + /// Default value: "gsKnGZ041HLL4IM8" + /// + public static string DefaultPassPhrase { get; set; } + + /// + /// Default value: Encoding.ASCII.GetBytes("jkE49230Tf093b42") + /// + public static byte[] DefaultInitVectorBytes { get; set; } + + /// + /// Default value: Encoding.ASCII.GetBytes("hgt!16kl") + /// + public static byte[] DefaultSalt { get; set; } + + /// + /// This constant is used to determine the keysize of the encryption algorithm. + /// + public const int Keysize = 256; + + static SimpleStringCipher() + { + DefaultPassPhrase = "gsKnGZ041HLL4IM9"; + DefaultInitVectorBytes = Encoding.ASCII.GetBytes("jkE49230Tf093b42"); + DefaultSalt = Encoding.ASCII.GetBytes("hgt!11kl"); + Instance = new SimpleStringCipher(); + } + + public SimpleStringCipher() + { + InitVectorBytes = DefaultInitVectorBytes; + } + + public string Encrypt(string plainText, string passPhrase = null, byte[] salt = null) + { + if (plainText == null) + { + return null; + } + + if (passPhrase == null) + { + passPhrase = DefaultPassPhrase; + } + + if (salt == null) + { + salt = DefaultSalt; + } + + var plainTextBytes = Encoding.UTF8.GetBytes(plainText); + using (var password = new Rfc2898DeriveBytes(passPhrase, salt)) + { + var keyBytes = password.GetBytes(Keysize / 8); + using (var symmetricKey = Aes.Create()) + { + symmetricKey.Mode = CipherMode.CBC; + using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, InitVectorBytes)) + { + using (var memoryStream = new MemoryStream()) + { + using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) + { + cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); + cryptoStream.FlushFinalBlock(); + var cipherTextBytes = memoryStream.ToArray(); + return Convert.ToBase64String(cipherTextBytes); + } + } + } + } + } + } + + public string Decrypt(string cipherText, string passPhrase = null, byte[] salt = null) + { + if (string.IsNullOrEmpty(cipherText)) + { + return null; + } + + if (passPhrase == null) + { + passPhrase = DefaultPassPhrase; + } + + if (salt == null) + { + salt = DefaultSalt; + } + + var cipherTextBytes = Convert.FromBase64String(cipherText); + using (var password = new Rfc2898DeriveBytes(passPhrase, salt)) + { + var keyBytes = password.GetBytes(Keysize / 8); + using (var symmetricKey = Aes.Create()) + { + symmetricKey.Mode = CipherMode.CBC; + using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, InitVectorBytes)) + { + using (var memoryStream = new MemoryStream(cipherTextBytes)) + { + using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) + { + var plainTextBytes = new byte[cipherTextBytes.Length]; + var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); + return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); + } + } + } + } + } + } +} diff --git a/APIJSON.NET/APIJSON.Data/Infrastructure/StringExtensions.cs b/APIJSON.NET/APIJSON.Data/Infrastructure/StringExtensions.cs new file mode 100644 index 0000000..240b92b --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Infrastructure/StringExtensions.cs @@ -0,0 +1,28 @@ +namespace APIJSON.Data; + +using System; +using System.Text.RegularExpressions; +public static class StringExtensions +{ + + /// + /// 是否有值 + /// + /// + /// + public static bool IsValue(this object str) + { + return str != null && !string.IsNullOrEmpty(str.ToString()); + } + + /// + /// + /// + /// + /// + public static string GetParamName(this string param) + { + return param + new Random().Next(1, 100); + } + +} \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.Data/Models/DbOptions.cs b/APIJSON.NET/APIJSON.Data/Models/DbOptions.cs new file mode 100644 index 0000000..c33da47 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Models/DbOptions.cs @@ -0,0 +1,15 @@ +namespace APIJSON.Data; + +using global::SqlSugar; +public class DbOptions +{ + /// + /// + /// + public DbType DbType { get; set; } + + /// + /// + /// + public string ConnectionString { get; set; } +} diff --git a/APIJSON.NET/APIJSON.Data/Models/Login.cs b/APIJSON.NET/APIJSON.Data/Models/Login.cs new file mode 100644 index 0000000..0dcdf11 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Models/Login.cs @@ -0,0 +1,19 @@ +using SqlSugar; +using System; + +namespace APIJSON.Data.Models; + +public class Login +{ + [SugarColumn(IsNullable = false, IsPrimaryKey = true)] + public int userId { get; set; } + [SugarColumn(Length = 100, ColumnDescription = "用户名")] + public string userName { get; set; } + [SugarColumn(Length = 200, ColumnDescription = "密码")] + public string passWord { get; set; } + [SugarColumn(Length = 100, ColumnDescription = "密码盐")] + public string passWordSalt { get; set; } + [SugarColumn(Length = 100, ColumnDescription = "权限组")] + public string roleCode { get; set; } + +} diff --git a/APIJSON.NET/APIJSON.Data/Models/RoleItem.cs b/APIJSON.NET/APIJSON.Data/Models/RoleItem.cs new file mode 100644 index 0000000..ba16bc6 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Models/RoleItem.cs @@ -0,0 +1,18 @@ +namespace APIJSON.Data.Models; + +public class RoleItem +{ + public string[] Table { get; set; } + public string[] Column { get; set; } + public string[] Filter { get; set; } +} +public class Role +{ + public string Name { get; set; } + public RoleItem Select { get; set; } + public RoleItem Update { get; set; } + public RoleItem Insert { get; set; } + public RoleItem Delete { get; set; } + +} + diff --git a/APIJSON.NET/APIJSONCommon/Properties/AssemblyInfo.cs b/APIJSON.NET/APIJSON.Data/Properties/AssemblyInfo.cs similarity index 87% rename from APIJSON.NET/APIJSONCommon/Properties/AssemblyInfo.cs rename to APIJSON.NET/APIJSON.Data/Properties/AssemblyInfo.cs index fbcdc6a..7b4ef0d 100644 --- a/APIJSON.NET/APIJSONCommon/Properties/AssemblyInfo.cs +++ b/APIJSON.NET/APIJSON.Data/Properties/AssemblyInfo.cs @@ -5,7 +5,7 @@ // 控制。更改这些特性值可修改 // 与程序集关联的信息。 [assembly: AssemblyTitle("ApiJson.Common")] -[assembly: AssemblyDescription("增加ToSql接口,处理sql注入的情况")] +[assembly: AssemblyDescription("0.0.19 处理别名如果为关键字的缺陷")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ApiJson.Common")] @@ -31,5 +31,5 @@ //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.0.6.0")] -[assembly: AssemblyFileVersion("0.0.6.0")] +[assembly: AssemblyVersion("0.0.10.0")] +[assembly: AssemblyFileVersion("0.0.10.0")] diff --git a/APIJSON.NET/APIJSON.Data/SelectTable.cs b/APIJSON.NET/APIJSON.Data/SelectTable.cs new file mode 100644 index 0000000..8aa9e2d --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/SelectTable.cs @@ -0,0 +1,832 @@ +namespace APIJSON.Data; + +using AspectCore.Extensions.Reflection; +using global::SqlSugar; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Dynamic; +using System.Linq; +using System.Text.RegularExpressions; + +/// +/// +/// +public class SelectTable +{ + private readonly IIdentityService _identitySvc; + private readonly ITableMapper _tableMapper; + private readonly SqlSugarClient db; + + /// + /// + /// + /// + /// + /// + public SelectTable(IIdentityService identityService, ITableMapper tableMapper, SqlSugarClient dbClient) + { + _identitySvc = identityService; + _tableMapper = tableMapper; + db = dbClient; + } + /// + /// 判断表名是否正确 + /// + /// + /// + public virtual bool IsTable(string table) + { + return db.DbMaintenance.GetTableInfoList().Any(it => it.Name.Equals(table, StringComparison.CurrentCultureIgnoreCase)); + } + /// + /// 判断表的列名是否正确 + /// + /// + /// + /// + public virtual bool IsCol(string table, string col) + { + return db.DbMaintenance.GetColumnInfosByTableName(table).Any(it => it.DbColumnName.Equals(col, StringComparison.CurrentCultureIgnoreCase)); + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + public virtual Tuple GetTableData(string subtable, int page, int count, int query, string json, JObject dd) + { + + var role = _identitySvc.GetSelectRole(subtable); + if (!role.Item1)//没有权限返回异常 + { + throw new Exception(role.Item2); + } + string selectrole = role.Item2; + subtable = _tableMapper.GetTableName(subtable); + + JObject values = JObject.Parse(json); + page = values["page"] == null ? page : int.Parse(values["page"].ToString()); + count = values["count"] == null ? count : int.Parse(values["count"].ToString()); + query = values["query"] == null ? query : int.Parse(values["query"].ToString()); + values.Remove("page"); + values.Remove("count"); + var tb = sugarQueryable(subtable, selectrole, values, dd); + if (query == 1)//1-总数 + return new Tuple(new List(), tb.Count()); + else + { + if (count > 0) + { + int total = 0; + if (query == 0)//0-对象 + return new Tuple(tb.ToPageList(page, count), total); + else + //2-以上全部 + return new Tuple(tb.ToPageList(page, count, ref total), total); + + } + else + { + if (query == 0) + return new Tuple(tb.ToList(), 0); + else + return new Tuple(tb.ToList(), tb.Count()); + } + } + } + + /// + /// 解析并查询 + /// + /// + /// + public virtual JObject Query(string queryJson) + { + JObject resultObj = new JObject(); + + JObject queryJobj = JObject.Parse(queryJson); + resultObj = Query(queryJobj); + return resultObj; + } + + /// + /// 单表查询 + /// + /// + /// 返回数据的节点名称 默认为 infos + /// + public virtual JObject QuerySingle(JObject queryObj, string nodeName = "infos") + { + JObject resultObj = new JObject(); + resultObj.Add("code", "200"); + resultObj.Add("msg", "success"); + + int total = 0; + foreach (var item in queryObj) + { + string key = item.Key.Trim(); + + if (key.EndsWith("[]")) + { + total = QuerySingleList(resultObj, item, nodeName); + } + else if (key.Equals("func")) + { + ExecFunc(resultObj, item); + } + else if (key.Equals("total@")|| key.Equals("total")) + { + resultObj.Add("total", total); + } + } + + return resultObj; + } + + /// + /// 获取查询语句 + /// + /// + /// + public virtual string ToSql(JObject queryObj) + { + foreach (var item in queryObj) + { + string key = item.Key.Trim(); + + if (key.EndsWith("[]")) + { + return ToSql(item); + } + } + return string.Empty; + } + + /// + /// 解析并查询 + /// + /// + /// + public virtual JObject Query(JObject queryObj) + { + JObject resultObj = new JObject(); + resultObj.Add("code", "200"); + resultObj.Add("msg", "success"); + + int total = 0; + foreach (var item in queryObj) + { + string key = item.Key.Trim(); + + if (key.Equals("[]")) + { + total = QueryMoreList(resultObj, item); + } + else if (key.EndsWith("[]")) + { + total = QuerySingleList(resultObj, item); + } + else if (key.Equals("func")) + { + ExecFunc(resultObj, item); + } + else if (key.Equals("total@")|| key.Equals("total")) + { + resultObj.Add("total", total); + } + else + { + var template = GetFirstData(key, item.Value.ToString(), resultObj); + if (template != null) + { + resultObj.Add(key, JToken.FromObject(template)); + } + } + } + + return resultObj; + } + + + + //动态调用方法 + private object ExecFunc(string funcname, object[] param, Type[] types) + { + var method = typeof(FuncList).GetMethod(funcname); + + var reflector = method.GetReflector(); + var result = reflector.Invoke(new FuncList(), param); + return result; + } + + //生成sql + private string ToSql(string subtable, int page, int count, int query, string json) + { + JObject values = JObject.Parse(json); + page = values["page"] == null ? page : int.Parse(values["page"].ToString()); + count = values["count"] == null ? count : int.Parse(values["count"].ToString()); + query = values["query"] == null ? query : int.Parse(values["query"].ToString()); + values.Remove("page"); + values.Remove("count"); + subtable = _tableMapper.GetTableName(subtable); + var tb = sugarQueryable(subtable, "*", values, null); + var sqlObj = tb.Skip((page - 1) * count).Take(10).ToSql(); + return sqlObj.Key; + } + + // + private dynamic GetFirstData(string subtable, string json, JObject job) + { + + var role = _identitySvc.GetSelectRole(subtable); + if (!role.Item1)//没有权限返回异常 + { + throw new Exception(role.Item2); + } + string selectrole = role.Item2; + subtable = _tableMapper.GetTableName(subtable); + JObject values = JObject.Parse(json); + values.Remove("page"); + values.Remove("count"); + var tb = sugarQueryable(subtable, selectrole, values, job).First(); + var dic = (IDictionary)tb; + foreach (var item in values.Properties().Where(it => it.Name.EndsWith("()"))) + { + if (item.Value.IsValue()) + { + string func = item.Value.ToString().Substring(0, item.Value.ToString().IndexOf("(")); + string param = item.Value.ToString().Substring(item.Value.ToString().IndexOf("(") + 1).TrimEnd(')'); + var types = new List(); + var paramss = new List(); + foreach (var va in param.Split(',')) + { + types.Add(typeof(object)); + paramss.Add(tb.Where(it => it.Key.Equals(va)).Select(i => i.Value)); + } + dic[item.Name] = ExecFunc(func, paramss.ToArray(), types.ToArray()); + } + } + + return tb; + + } + + //单表查询,返回的数据在指定的NodeName节点 + private int QuerySingleList(JObject resultObj, KeyValuePair item, string nodeName) + { + string key = item.Key.Trim(); + var jb = JObject.Parse(item.Value.ToString()); + int page = jb["page"] == null ? 0 : int.Parse(jb["page"].ToString()); + int count = jb["count"] == null ? 10 : int.Parse(jb["count"].ToString()); + int query = jb["query"] == null ? 0 : int.Parse(jb["query"].ToString()); + int total = 0; + + jb.Remove("page"); jb.Remove("count"); jb.Remove("query"); + + var htt = new JArray(); + foreach (var t in jb) + { + var datas = GetTableData(t.Key, page, count, query, t.Value.ToString(), null); + if (query > 0) + { + total = datas.Item2; + } + foreach (var data in datas.Item1) + { + htt.Add(JToken.FromObject(data)); + } + } + + if (!string.IsNullOrEmpty(nodeName)) + { + resultObj.Add(nodeName, htt); + } + else + resultObj.Add(key, htt); + return total; + } + + //生成sql + private string ToSql(KeyValuePair item) + { + string key = item.Key.Trim(); + var jb = JObject.Parse(item.Value.ToString()); + int page = jb["page"] == null ? 0 : int.Parse(jb["page"].ToString()); + int count = jb["count"] == null ? 10 : int.Parse(jb["count"].ToString()); + int query = jb["query"] == null ? 0 : int.Parse(jb["query"].ToString()); + + jb.Remove("page"); jb.Remove("count"); jb.Remove("query"); + var htt = new JArray(); + foreach (var t in jb) + { + return ToSql(t.Key, page, count, query, t.Value.ToString()); + } + + return string.Empty; + } + + //单表查询 + private int QuerySingleList(JObject resultObj, KeyValuePair item) + { + string key = item.Key.Trim(); + return QuerySingleList(resultObj, item, key); + } + + //多列表查询 + private int QueryMoreList(JObject resultObj, KeyValuePair item) + { + int total = 0; + + var jb = JObject.Parse(item.Value.ToString()); + var page = jb["page"] == null ? 0 : int.Parse(jb["page"].ToString()); + var count = jb["count"] == null ? 10 : int.Parse(jb["count"].ToString()); + var query = jb["query"] == null ? 0 : int.Parse(jb["query"].ToString()); + jb.Remove("page"); jb.Remove("count"); jb.Remove("query"); + var htt = new JArray(); + List tables = new List(), where = new List(); + foreach (var t in jb) + { + tables.Add(t.Key); where.Add(t.Value.ToString()); + } + if (tables.Count > 0) + { + string table = tables[0]; + var temp = GetTableData(table, page, count, query, where[0], null); + if (query > 0) + { + total = temp.Item2; + } + + foreach (var dd in temp.Item1) + { + var zht = new JObject(); + zht.Add(table, JToken.FromObject(dd)); + for (int i = 1; i < tables.Count; i++) + { + string subtable = tables[i]; + if (subtable.EndsWith("[]")) + { + subtable = subtable.TrimEnd("[]".ToCharArray()); + var jbb = JObject.Parse(where[i]); + page = jbb["page"] == null ? 0 : int.Parse(jbb["page"].ToString()); + count = jbb["count"] == null ? 0 : int.Parse(jbb["count"].ToString()); + + var lt = new JArray(); + foreach (var d in GetTableData(subtable, page, count, query, jbb[subtable].ToString(), zht).Item1) + { + lt.Add(JToken.FromObject(d)); + } + zht.Add(tables[i], lt); + } + else + { + var ddf = GetFirstData(subtable, where[i].ToString(), zht); + if (ddf != null) + { + zht.Add(subtable, JToken.FromObject(ddf)); + + } + } + } + htt.Add(zht); + } + + } + if (query != 1) + { + resultObj.Add("[]", htt); + } + + return total; + } + + //执行方法 + private void ExecFunc(JObject resultObj, KeyValuePair item) + { + JObject jb = JObject.Parse(item.Value.ToString()); + Type type = typeof(FuncList); + + var dataJObj = new JObject(); + foreach (var f in jb) + { + var types = new List(); + var param = new List(); + foreach (var va in JArray.Parse(f.Value.ToString())) + { + types.Add(typeof(object)); + param.Add(va); + } + dataJObj.Add(f.Key, JToken.FromObject(ExecFunc(f.Key, param.ToArray(), types.ToArray()))); + } + resultObj.Add("func", dataJObj); + } + + // + private ISugarQueryable sugarQueryable(string subtable, string selectrole, JObject values, JObject dd) + { + if (!IsTable(subtable)) + { + throw new Exception($"表名{subtable}不正确!"); + } + var tb = db.Queryable(subtable, "tb"); + + + if (values["@column"].IsValue()) + { + ProcessColumn(subtable, selectrole, values, tb); + } + else + { + tb.Select(selectrole); + } + + List conModels = new List(); + if (values["identity"].IsValue()) + { + conModels.Add(new ConditionalModel() { FieldName = values["identity"].ToString(), ConditionalType = ConditionalType.Equal, FieldValue = _identitySvc.GetUserIdentity() }); + } + foreach (var va in values) + { + string vakey = va.Key.Trim(); + string fieldValue = va.Value.ToString(); + if (vakey.StartsWith("@")) + { + continue; + } + if (vakey.EndsWith("$"))//模糊查询 + { + FuzzyQuery(subtable, conModels, va); + } + else if (vakey.EndsWith("{}"))//逻辑运算 + { + ConditionQuery(subtable, conModels, va); + } + else if (vakey.EndsWith("%"))//bwtween查询 + { + ConditionBetween(subtable, conModels, va); + } + else if (vakey.EndsWith("@") && dd != null) // 关联上一个table + { + string[] str = fieldValue.Split('/'); + string value = string.Empty; + if (str.Length == 3) + { + value = dd[str[1]][str[2]].ToString(); + } + else if (str.Length == 2) + { + value = dd[str[0]][str[1]].ToString(); + } + + conModels.Add(new ConditionalModel() { FieldName = vakey.TrimEnd('@'), ConditionalType = ConditionalType.Equal, FieldValue = value }); + + } + else if (vakey.EndsWith("~"))//不等于 + { + conModels.Add(new ConditionalModel() { FieldName = vakey.TrimEnd('~'), ConditionalType = ConditionalType.NoEqual, FieldValue = fieldValue }); + } + else if (IsCol(subtable, vakey)) //其他where条件 + { + conModels.Add(new ConditionalModel() { FieldName = vakey, ConditionalType = ConditionalType.Equal, FieldValue = fieldValue }); + } + } + tb.Where(conModels); + + //排序 + ProcessOrder(subtable, values, tb); + + //分组 + PrccessGroup(subtable, values, tb); + + //Having + ProcessHaving(values, tb); + return tb; + } + + //处理字段重命名 "@column":"toId:parentId",对应SQL是toId AS parentId,将查询的字段toId变为parentId返回 + private void ProcessColumn(string subtable, string selectrole, JObject values, ISugarQueryable tb) + { + var str = new System.Text.StringBuilder(100); + foreach (var item in values["@column"].ToString().Split(',')) + { + string[] ziduan = item.Split(':'); + string colName = ziduan[0]; + var ma = new Regex(@"\((\w+)\)").Match(colName); + //处理max,min这样的函数 + if (ma.Success && ma.Groups.Count > 1) + { + colName = ma.Groups[1].Value; + } + + //判断列表是否有权限 sum(1),sum(*),Count(1)这样的值直接有效 + if (colName == "*" || int.TryParse(colName, out int colNumber) || (IsCol(subtable, colName) && _identitySvc.ColIsRole(colName, selectrole.Split(',')))) + { + if (ziduan.Length > 1) + { + if (ziduan[1].Length > 20) + { + throw new Exception("别名不能超过20个字符"); + } + str.Append(ziduan[0] + " as `" + ReplaceSQLChar(ziduan[1]) + "`,"); + } + //不对函数加``,解决sum(*),Count(1)等不能使用的问题 + else if (ziduan[0].Contains('(')) + { + str.Append(ziduan[0] + ","); + } + else + str.Append("`" + ziduan[0] + "`" + ","); + + } + } + if (string.IsNullOrEmpty(str.ToString())) + { + throw new Exception($"表名{subtable}没有可查询的字段!"); + } + tb.Select(str.ToString().TrimEnd(',')); + } + + // "@having":"function0(...)?value0;function1(...)?value1;function2(...)?value2...", + // SQL函数条件,一般和 @group一起用,函数一般在 @column里声明 + private void ProcessHaving(JObject values, ISugarQueryable tb) + { + if (values["@having"].IsValue()) + { + List hw = new List(); + List havingItems = new List(); + if (values["@having"].HasValues) + { + havingItems = values["@having"].Select(p => p.ToString()).ToList(); + } + else + { + havingItems.Add(values["@having"].ToString()); + } + foreach (var item in havingItems) + { + string and = item.ToString(); + var model = new ConditionalModel(); + if (and.Contains(">=")) + { + model.FieldName = and.Split(new string[] { ">=" }, StringSplitOptions.RemoveEmptyEntries)[0]; + model.ConditionalType = ConditionalType.GreaterThanOrEqual; + model.FieldValue = and.Split(new string[] { ">=" }, StringSplitOptions.RemoveEmptyEntries)[1]; + } + else if (and.Contains("<=")) + { + + model.FieldName = and.Split(new string[] { "<=" }, StringSplitOptions.RemoveEmptyEntries)[0]; + model.ConditionalType = ConditionalType.LessThanOrEqual; + model.FieldValue = and.Split(new string[] { "<=" }, StringSplitOptions.RemoveEmptyEntries)[1]; + } + else if (and.Contains(">")) + { + model.FieldName = and.Split(new string[] { ">" }, StringSplitOptions.RemoveEmptyEntries)[0]; + model.ConditionalType = ConditionalType.GreaterThan; + model.FieldValue = and.Split(new string[] { ">" }, StringSplitOptions.RemoveEmptyEntries)[1]; + } + else if (and.Contains("<")) + { + model.FieldName = and.Split(new string[] { "<" }, StringSplitOptions.RemoveEmptyEntries)[0]; + model.ConditionalType = ConditionalType.LessThan; + model.FieldValue = and.Split(new string[] { "<" }, StringSplitOptions.RemoveEmptyEntries)[1]; + } + else if (and.Contains("!=")) + { + model.FieldName = and.Split(new string[] { "!=" }, StringSplitOptions.RemoveEmptyEntries)[0]; + model.ConditionalType = ConditionalType.NoEqual; + model.FieldValue = and.Split(new string[] { "!=" }, StringSplitOptions.RemoveEmptyEntries)[1]; + } + else if (and.Contains("=")) + { + model.FieldName = and.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries)[0]; + model.ConditionalType = ConditionalType.Equal; + model.FieldValue = and.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries)[1]; + } + hw.Add(model); + } + + //var d = db.Context.Utilities.ConditionalModelToSql(hw); + //tb.Having(d.Key, d.Value); + tb.Having(string.Join(",", havingItems)); + } + } + + //"@group":"column0,column1...",分组方式。如果 @column里声明了Table的id,则id也必须在 @group中声明;其它情况下必须满足至少一个条件: + //1.分组的key在 @column里声明 + //2.Table主键在 @group中声明 + private void PrccessGroup(string subtable, JObject values, ISugarQueryable tb) + { + if (values["@group"].IsValue()) + { + var str = new System.Text.StringBuilder(100); + foreach (var and in values["@group"].ToString().Split(',')) + { + if (IsCol(subtable, and)) + { + str.Append(and + ","); + } + } + tb.GroupBy(str.ToString().TrimEnd(',')); + } + } + + //处理排序 "@order":"name-,id"查询按 name降序、id默认顺序 排序的User数组 + private void ProcessOrder(string subtable, JObject values, ISugarQueryable tb) + { + if (values["@order"].IsValue()) + { + foreach (var item in values["@order"].ToString().Split(',')) + { + string col = item.Replace("-", "").Replace("+", ""); + if (IsCol(subtable, col)) + { + if (item.EndsWith("-")) + { + tb.OrderBy($"{col} desc"); + } + else if (item.EndsWith("+")) + { + tb.OrderBy($"{col} asc"); + } + else + { + tb.OrderBy($"{col}"); + } + } + } + } + } + + //条件查询 "key{}":"条件0,条件1...",条件为任意SQL比较表达式字符串,非Number类型必须用''包含条件的值,如'a' + //&, |, ! 逻辑运算符,对应数据库 SQL 中的 AND, OR, NOT。 + // 横或纵与:同一字段的值内条件默认 | 或连接,不同字段的条件默认 & 与连接。 + // ① & 可用于"key&{}":"条件"等 + // ② | 可用于"key|{}":"条件", "key|{}":[] 等,一般可省略 + // ③ ! 可单独使用,如"key!":Object,也可像&,|一样配合其他功能符使用 + private void ConditionQuery(string subtable, List conModels, KeyValuePair va) + { + string vakey = va.Key.Trim(); + string field = vakey.TrimEnd("{}".ToCharArray()); + if (va.Value.HasValues) + { + List inValues = new List(); + foreach (var cm in va.Value) + { + inValues.Add(cm.ToString()); + } + + conModels.Add(new ConditionalModel() + { + FieldName = field.TrimEnd("!".ToCharArray()), + ConditionalType = field.EndsWith("!") ? ConditionalType.NotIn : ConditionalType.In, + FieldValue = string.Join(",", inValues) + }); + + } + else + { + var ddt = new List>(); + foreach (var and in va.Value.ToString().Split(',')) + { + var model = new ConditionalModel(); + model.FieldName = field.TrimEnd("&".ToCharArray());//处理&()的查询方式 + if (and.StartsWith(">=")) + { + model.ConditionalType = ConditionalType.GreaterThanOrEqual; + model.FieldValue = and.TrimStart(">=".ToCharArray()); + } + else if (and.StartsWith("<=")) + { + + model.ConditionalType = ConditionalType.LessThanOrEqual; + model.FieldValue = and.TrimStart("<=".ToCharArray()); + } + else if (and.StartsWith(">")) + { + model.ConditionalType = ConditionalType.GreaterThan; + model.FieldValue = and.TrimStart('>'); + } + else if (and.StartsWith("<")) + { + model.ConditionalType = ConditionalType.LessThan; + model.FieldValue = and.TrimStart('<'); + } + ddt.Add(new KeyValuePair((field.EndsWith("&") ? WhereType.And : WhereType.Or), model)); + } + conModels.Add(new ConditionalCollections() { ConditionalList = ddt }); + } + } + + //"key%":"start,end" => "key%":["start,end"],其中 start 和 end 都只能为 Boolean, Number, String 中的一种,如 "2017-01-01,2019-01-01" ,["1,90000", "82001,100000"] ,可用于连续范围内的筛选 + private void ConditionBetween(string subtable, List conModels, KeyValuePair va) + { + string vakey = va.Key.Trim(); + string field = vakey.TrimEnd("%".ToCharArray()); + List inValues = new List(); + + if (va.Value.HasValues) + { + foreach (var cm in va.Value) + { + inValues.Add(cm.ToString()); + } + } + else + { + inValues.Add(va.Value.ToString()); + } + for (var i = 0; i < inValues.Count; i++) + { + var fileds = inValues[i].Split(','); + if (fileds.Length == 2) + { + var ddt = new List>(); + + var leftCondition = new ConditionalModel() + { + FieldName = field, + ConditionalType = ConditionalType.GreaterThanOrEqual, + FieldValue = fileds[0] + }; + ddt.Add(new KeyValuePair(i == 0 ? WhereType.And : WhereType.Or, leftCondition)); + var rightCondition = new ConditionalModel() + { + FieldName = field, + ConditionalType = ConditionalType.LessThanOrEqual, + FieldValue = fileds[1] + }; + ddt.Add(new KeyValuePair(WhereType.And, rightCondition)); + + conModels.Add(new ConditionalCollections() { ConditionalList = ddt }); + } + } + } + + //模糊搜索 "key$":"SQL搜索表达式" => "key$":["SQL搜索表达式"],任意SQL搜索表达式字符串,如 %key%(包含key), key%(以key开始), %k%e%y%(包含字母k,e,y) 等,%表示任意字符 + private void FuzzyQuery(string subtable, List conModels, KeyValuePair va) + { + string vakey = va.Key.Trim(); + string fieldValue = va.Value.ToString(); + var conditionalType = ConditionalType.Like; + if (IsCol(subtable, vakey.TrimEnd('$'))) + { + //支持三种like查询 + if (fieldValue.StartsWith("%") && fieldValue.EndsWith("%")) + { + conditionalType = ConditionalType.Like; + } + else if (fieldValue.StartsWith("%")) + { + conditionalType = ConditionalType.LikeRight; + } + else if (fieldValue.EndsWith("%")) + { + conditionalType = ConditionalType.LikeLeft; + } + conModels.Add(new ConditionalModel() { FieldName = vakey.TrimEnd('$'), ConditionalType = conditionalType, FieldValue = fieldValue.TrimEnd("%".ToArray()).TrimStart("%".ToArray()) }); + } + } + + //处理sql注入 + private string ReplaceSQLChar(string str) + { + if (str == String.Empty) + return String.Empty; + str = str.Replace("'", ""); + str = str.Replace(";", ""); + str = str.Replace(",", ""); + str = str.Replace("?", ""); + str = str.Replace("<", ""); + str = str.Replace(">", ""); + str = str.Replace("(", ""); + str = str.Replace(")", ""); + str = str.Replace("@", ""); + str = str.Replace("=", ""); + str = str.Replace("+", ""); + str = str.Replace("*", ""); + str = str.Replace("&", ""); + str = str.Replace("#", ""); + str = str.Replace("%", ""); + str = str.Replace("$", ""); + str = str.Replace("\"", ""); + + //删除与数据库相关的词 + str = Regex.Replace(str, "delete from", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "drop table", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "xp_cmdshell", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "exec master", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "net localgroup administrators", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "net user", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "-", "", RegexOptions.IgnoreCase); + str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase); + return str; + } +} diff --git a/APIJSON.NET/APIJSON.Data/Services/IIdentityService.cs b/APIJSON.NET/APIJSON.Data/Services/IIdentityService.cs new file mode 100644 index 0000000..869ad8f --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Services/IIdentityService.cs @@ -0,0 +1,32 @@ +using APIJSON.Data.Models; +using System; + +namespace APIJSON.Data; + +public interface IIdentityService +{ + /// + /// 获取当前用户id + /// + /// + string GetUserIdentity(); + /// + /// 获取当前用户权限组名称 + /// + /// + string GetUserRoleName(); + /// + /// 获取当前用户权限 + /// + /// + Role GetRole(); + /// + /// 获取当前表的可查询字段 + /// + /// + /// + Tuple GetSelectRole(string table); + + + bool ColIsRole(string col, string[] selectrole); +} diff --git a/APIJSON.NET/APIJSONCommon/Services/ITableMapper.cs b/APIJSON.NET/APIJSON.Data/Services/ITableMapper.cs similarity index 86% rename from APIJSON.NET/APIJSONCommon/Services/ITableMapper.cs rename to APIJSON.NET/APIJSON.Data/Services/ITableMapper.cs index 30818f5..220099e 100644 --- a/APIJSON.NET/APIJSONCommon/Services/ITableMapper.cs +++ b/APIJSON.NET/APIJSON.Data/Services/ITableMapper.cs @@ -1,5 +1,5 @@ -namespace APIJSON.NET.Services -{ +namespace APIJSON.Data; + public interface ITableMapper { /// @@ -9,4 +9,4 @@ public interface ITableMapper /// string GetTableName(string oldname); } -} + diff --git a/APIJSON.NET/APIJSON.Data/Services/TableMapper.cs b/APIJSON.NET/APIJSON.Data/Services/TableMapper.cs new file mode 100644 index 0000000..2c67426 --- /dev/null +++ b/APIJSON.NET/APIJSON.Data/Services/TableMapper.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using Volo.Abp.DependencyInjection; + +namespace APIJSON.Data; + +public class TableMapper : ITableMapper,ITransientDependency +{ + private readonly Dictionary _options= new Dictionary(StringComparer.OrdinalIgnoreCase); + public TableMapper(IOptions> options) + { + foreach (var item in options.Value) + { + _options.Add(item.Key, item.Value); + } + } + public string GetTableName(string oldname) + { + if (_options.ContainsKey(oldname)) + { + return _options[oldname]; + } + return oldname; + } +} diff --git a/APIJSON.NET/APIJSON.NET.Test/APIJSON.NET.Test.csproj b/APIJSON.NET/APIJSON.NET.Test/APIJSON.NET.Test.csproj index 7a13087..d3d6c1e 100644 --- a/APIJSON.NET/APIJSON.NET.Test/APIJSON.NET.Test.csproj +++ b/APIJSON.NET/APIJSON.NET.Test/APIJSON.NET.Test.csproj @@ -2,11 +2,11 @@ Exe - netcoreapp2.2 + net8.0 - + diff --git a/APIJSON.NET/APIJSON.NET.Test/Program.cs b/APIJSON.NET/APIJSON.NET.Test/Program.cs index b23ebdc..369d0cc 100644 --- a/APIJSON.NET/APIJSON.NET.Test/Program.cs +++ b/APIJSON.NET/APIJSON.NET.Test/Program.cs @@ -1,53 +1,55 @@ using RestSharp; using System; + + +namespace APIJSON.NET.Test; -namespace APIJSON.NET.Test +class Program { - class Program + static void Main(string[] args) { - static void Main(string[] args) - { - var client = new RestClient("http://localhost:5000/"); + var client = new RestClient("http://localhost:5000/"); - var login = new RestRequest("token", Method.POST); - login.AddJsonBody(new TokenInput() { username = "admin1", password = "123456" }); - IRestResponse token = client.Execute(login); + var login = new RestRequest("token"); + login.Method= Method.Post; + login.AddJsonBody(new TokenInput() { username = "admin1", password = "123456" }); + var token = client.Post(login); - Console.WriteLine(token.Data.data.AccessToken); + Console.WriteLine(token.data.AccessToken); - var request = new RestRequest("get", Method.POST); - request.AddHeader("Content-Type", "application/json"); - request.AddHeader("Authorization", "Bearer " + token.Data.data.AccessToken); - request.AddJsonBody(@"{ + var request = new RestRequest("get"); + request.Method = Method.Post; + request.AddHeader("Content-Type", "application/json"); + request.AddHeader("Authorization", "Bearer " + token.data.AccessToken); + request.AddJsonBody(@"{ 'User': { 'id': 38710 } } "); - IRestResponse response = client.Execute(request); - Console.WriteLine(response.Content); - - + var response = client.Execute(request); + Console.WriteLine(response.Content); + - Console.ReadLine(); - } - } - public class TokenInput - { - public string username { get; set; } - public string password { get; set; } - } - public class TokenData - { - public AuthenticateResultModel data { get; set; } + + Console.ReadLine(); } - public class AuthenticateResultModel - { - public string AccessToken { get; set; } +} +public class TokenInput +{ + public string username { get; set; } + public string password { get; set; } +} +public class TokenData +{ + public AuthenticateResultModel data { get; set; } +} +public class AuthenticateResultModel +{ + public string AccessToken { get; set; } - public int ExpireInSeconds { get; set; } + public int ExpireInSeconds { get; set; } - } } diff --git a/APIJSON.NET/APIJSON.NET.sln b/APIJSON.NET/APIJSON.NET.sln index 4c1e774..7537f36 100644 --- a/APIJSON.NET/APIJSON.NET.sln +++ b/APIJSON.NET/APIJSON.NET.sln @@ -1,13 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.202 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34525.116 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APIJSON.NET", "APIJSON.NET\APIJSON.NET.csproj", "{FF647576-A104-4D54-954D-3547B4FDCDB2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APIJSON.NET.Test", "APIJSON.NET.Test\APIJSON.NET.Test.csproj", "{0828346E-207E-49F8-AD57-E1AB6B6E4077}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiJson.Common", "APIJSONCommon\ApiJson.Common.csproj", "{3B79D4FD-0BC7-49FD-A3DD-E514433B4B35}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APIJSON.Data", "APIJSON.Data\APIJSON.Data.csproj", "{3B79D4FD-0BC7-49FD-A3DD-E514433B4B35}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/APIJSON.NET/APIJSON.NET/APIJSON.NET.csproj b/APIJSON.NET/APIJSON.NET/APIJSON.NET.csproj index 1a23f95..0dd3965 100644 --- a/APIJSON.NET/APIJSON.NET/APIJSON.NET.csproj +++ b/APIJSON.NET/APIJSON.NET/APIJSON.NET.csproj @@ -1,37 +1,29 @@  - - netcoreapp3.1 - + + net8.0 + 7f2f6cea-01ae-4b0d-bee0-e48b642e22fe + Linux + - - - + + + - - - + + + + + + + + + - - - Always - - + + + - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.NET/AppModule.cs b/APIJSON.NET/APIJSON.NET/AppModule.cs new file mode 100644 index 0000000..6b5dc30 --- /dev/null +++ b/APIJSON.NET/APIJSON.NET/AppModule.cs @@ -0,0 +1,123 @@ +using APIJSON.Data; +using APIJSON.Data.Models; +using APIJSON.NET.Data; +using APIJSON.NET.Data.Models; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Cors; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.IdentityModel.Tokens; +using Microsoft.OpenApi.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; +using Volo.Abp.Swashbuckle; + +namespace APIJSON.NET; + +[DependsOn( + typeof(AbpAspNetCoreMvcModule), + typeof(AbpAutofacModule), + typeof(AbpAspNetCoreSerilogModule), + typeof(AbpSwashbuckleModule), + typeof(ApiJsonNetDataModule))] +public class AppModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var hostingEnvironment = context.Services.GetHostingEnvironment(); + + PreConfigure(options => + { + options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + }); + + ConfigureCors(context, configuration); + ConfigureSwaggerServices(context, configuration); + + context.Services.Configure>(configuration.GetSection("RoleList")); + context.Services.Configure>(configuration.GetSection("tablempper")); + context.Services.Configure(tokenAuthConfig => + { + tokenAuthConfig.SecurityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(configuration["Authentication:JwtBearer:SecurityKey"])); + tokenAuthConfig.Issuer = configuration["Authentication:JwtBearer:Issuer"]; + tokenAuthConfig.Audience = configuration["Authentication:JwtBearer:Audience"]; + tokenAuthConfig.SigningCredentials = new SigningCredentials(tokenAuthConfig.SecurityKey, SecurityAlgorithms.HmacSha256); + tokenAuthConfig.Expiration = TimeSpan.FromDays(1); + }); + AuthConfigurer.Configure(context.Services,configuration); + + context.Services.AddSingleton(); + + } + private static void ConfigureSwaggerServices(ServiceConfigurationContext context, IConfiguration configuration) + { + context.Services.AddAbpSwaggerGen( + options => + { + options.SwaggerDoc("v1", new OpenApiInfo { Title = "APIJSON.NET API", Version = "v1" }); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + }); + } + private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration) + { + context.Services.AddCors(options => + { + options.AddDefaultPolicy(builder => + { + builder + .WithOrigins(configuration["CorsUrls"]? + .Split(",", StringSplitOptions.RemoveEmptyEntries) + .Select(o => o.RemovePostFix("/")) + .ToArray() ?? Array.Empty()) + .WithAbpExposedHeaders() + .SetIsOriginAllowedToAllowWildcardSubdomains() + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); + }); + } + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseAbpRequestLocalization(); + app.UseCorrelationId(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseCors(); + app.UseAuthentication(); + + + app.UseAuthorization(); + + app.UseSwagger(); + app.UseAbpSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "MyProjectName API"); + + }); + app.UseAbpSerilogEnrichers(); + app.UseConfiguredEndpoints(); + app.UseJwtTokenMiddleware(); + DbInit.Initialize(app); + } +} diff --git a/APIJSON.NET/APIJSON.NET/Controllers/HomeController.cs b/APIJSON.NET/APIJSON.NET/Controllers/HomeController.cs index df8362d..2366e77 100644 --- a/APIJSON.NET/APIJSON.NET/Controllers/HomeController.cs +++ b/APIJSON.NET/APIJSON.NET/Controllers/HomeController.cs @@ -4,13 +4,13 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -namespace APIJSON.NET.Controllers +namespace APIJSON.NET.Controllers; + +public class HomeController : Controller { - public class HomeController : Controller + public IActionResult Index() { - public IActionResult Index() - { - return Redirect("index.html"); - } + return File("./index.html", "text/html"); + //return Redirect("index.html"); } } \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.NET/Controllers/JsonController.cs b/APIJSON.NET/APIJSON.NET/Controllers/JsonController.cs index 1fd8d2e..ae65bed 100644 --- a/APIJSON.NET/APIJSON.NET/Controllers/JsonController.cs +++ b/APIJSON.NET/APIJSON.NET/Controllers/JsonController.cs @@ -1,250 +1,269 @@ -namespace APIJSON.NET.Controllers +using System; +using System.Collections.Generic; +using System.Web; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; +using System.Linq; +using System.Threading.Tasks; +using System.IO; +using System.Text; +using System.Net.Http; +using APIJSON.Data; +using SqlSugar; +using Volo.Abp.AspNetCore.Mvc; + +namespace APIJSON.NET.Controllers; + +[Route("api/[controller]")] +[ApiController] +public class JsonController : AbpControllerBase { - using System; - using System.Collections.Generic; - using System.Web; - using APIJSON.NET.Models; - using Microsoft.AspNetCore.Mvc; - using Microsoft.Extensions.Options; - using Newtonsoft.Json.Linq; - using SqlSugar; - using System.Linq; - using APIJSON.NET.Services; - using System.Reflection; - using Microsoft.AspNetCore.Cors; - using System.Threading.Tasks; - using System.IO; - using System.Text; - using System.Net.Http; - - [Route("api/[controller]")] - [ApiController] - [EnableCors("localhost")] - public class JsonController : ControllerBase + + private SelectTable selectTable; + private DbContext db; + private readonly IIdentityService _identitySvc; + private ITableMapper _tableMapper; + + public JsonController(IIdentityService identityService, ITableMapper tableMapper, DbContext _db) + { + db = _db; + _tableMapper = tableMapper; + _identitySvc = identityService; + selectTable = new SelectTable(_identitySvc, _tableMapper, _db.Db); + } + + /// + /// + /// + /// + [HttpGet("/test")] + public ActionResult Test() { + string str = "{\"page\":1,\"count\":3,\"query\":2,\"Org\":{\"@column\":\"Id,Name\"}}"; + var content = new StringContent(str); + return Ok(content); + } - private SelectTable selectTable; - private DbContext db; - private readonly IIdentityService _identitySvc; - private ITableMapper _tableMapper; + /// + /// 查询 + /// + /// + /// + [HttpPost("/get")] - public JsonController(IIdentityService identityService, ITableMapper tableMapper, DbContext _db) - { - db = _db; - _tableMapper = tableMapper; - _identitySvc = identityService; - selectTable = new SelectTable(_identitySvc, _tableMapper, _db.Db); - } + public ActionResult Query([FromBody] JObject jobject) + { + var st = new SelectTable(_identitySvc, _tableMapper, db.Db); + JObject resultJobj = st.Query(jobject); + return Ok(resultJobj); + } - /// - /// - /// - /// - [HttpGet("/test")] - public ActionResult Test() + [HttpPost("/{table}")] + public async Task QueryByTable([FromRoute]string table) + { + string json = string.Empty; + using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8)) { - string str = "{\"page\":1,\"count\":3,\"query\":2,\"Org\":{\"@column\":\"Id,Name\"}}"; - var content = new StringContent(str); - return Ok(content); + json = await reader.ReadToEndAsync(); } - /// - /// 查询 - /// - /// - /// - [HttpPost("/get")] + json = HttpUtility.UrlDecode(json); + JObject ht = new JObject(); + + JObject jobject = JObject.Parse(json); + ht.Add(table + "[]", jobject); - public async Task Query([FromBody] JObject jobject) + if (jobject["query"] != null && jobject["query"].ToString() != "0" && jobject["total@"] == null) { - JObject resultJobj = new SelectTable(_identitySvc, _tableMapper, db.Db).Query(jobject); - return Ok(resultJobj); + //自动添加总计数量 + ht.Add("total@", ""); } - [HttpPost("/{table}")] - public async Task QueryByTable([FromRoute]string table) + //每页最大1000条数据 + if (jobject["count"] != null && int.Parse(jobject["count"].ToString()) > 1000) { - string json = string.Empty; - using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8)) - { - json = await reader.ReadToEndAsync(); - } - - json = HttpUtility.UrlDecode(json); - JObject ht = new JObject(); + throw new Exception("count分页数量最大不能超过1000"); + } - JObject jobject = JObject.Parse(json); - ht.Add(table + "[]", jobject); - ht.Add("total@", ""); + bool isDebug = (jobject["@debug"] != null && jobject["@debug"].ToString() != "0"); + jobject.Remove("@debug"); - bool hasTableKey = false; - foreach (var item in jobject) + bool hasTableKey = false; + List ignoreConditions = new List { "page", "count", "query" }; + JObject tableConditions = new JObject();//表的其它查询条件,比如过滤,字段等 + foreach (var item in jobject) + { + if (item.Key.Equals(table, StringComparison.CurrentCultureIgnoreCase)) { - if (item.Key.Equals(table, StringComparison.CurrentCultureIgnoreCase)) - { - hasTableKey = true; - break; - } + hasTableKey = true; + break; } - if (!hasTableKey) + if (!ignoreConditions.Contains(item.Key.ToLower())) { - jobject.Add(table, new JObject()); + tableConditions.Add(item.Key, item.Value); } - - return await Query(ht); } - /// - /// 新增 - /// - /// - /// - [HttpPost("/add")] - public ActionResult Add([FromBody]JObject jobject) - { - JObject ht = new JObject(); - ht.Add("code", "200"); - ht.Add("msg", "success"); - try - { + foreach (var removeKey in tableConditions) + { + jobject.Remove(removeKey.Key); + } + if (!hasTableKey) + { + jobject.Add(table, tableConditions); + } + return Query(ht); + } + /// + /// 新增 + /// + /// + /// + [HttpPost("/add")] + public ActionResult Add([FromBody]JObject jobject) + { - foreach (var item in jobject) + JObject ht = new JObject(); + ht.Add("code", "200"); + ht.Add("msg", "success"); + try + { + foreach (var item in jobject) + { + string key = item.Key.Trim(); + var role = _identitySvc.GetRole(); + if (!role.Insert.Table.Contains(key, StringComparer.CurrentCultureIgnoreCase)) { - string key = item.Key.Trim(); - var role = _identitySvc.GetRole(); - if (!role.Insert.Table.Contains(key, StringComparer.CurrentCultureIgnoreCase)) - { - ht["code"] = "500"; - ht["msg"] = $"没权限添加{key}"; - break; - } - var dt = new Dictionary(); - foreach (var f in JObject.Parse(item.Value.ToString())) - { - if (f.Key.ToLower() != "id" && selectTable.IsCol(key, f.Key) && (role.Insert.Column.Contains("*") || role.Insert.Column.Contains(f.Key, StringComparer.CurrentCultureIgnoreCase))) - dt.Add(f.Key, f.Value); - } - int id = db.Db.Insertable(dt).AS(key).ExecuteReturnIdentity(); - ht.Add(key, JToken.FromObject(new { code = 200, msg = "success", id })); + ht["code"] = "500"; + ht["msg"] = $"没权限添加{key}"; + break; } + var dt = new Dictionary(); + foreach (var f in JObject.Parse(item.Value.ToString())) + { + if (f.Key.ToLower() != "id" && selectTable.IsCol(key, f.Key) && (role.Insert.Column.Contains("*") || role.Insert.Column.Contains(f.Key, StringComparer.CurrentCultureIgnoreCase))) + dt.Add(f.Key, f.Value); + } + int id = db.Db.Insertable(dt).AS(key).ExecuteReturnIdentity(); + ht.Add(key, JToken.FromObject(new { code = 200, msg = "success", id })); } - catch (Exception ex) - { - ht["code"] = "500"; - ht["msg"] = ex.Message; - } - return Ok(ht); } - /// - /// 修改 - /// - /// - /// - [HttpPost("/edit")] - public ActionResult Edit([FromBody]JObject jobject) + catch (Exception ex) { - JObject ht = new JObject(); - ht.Add("code", "200"); - ht.Add("msg", "success"); - try + ht["code"] = "500"; + ht["msg"] = ex.Message; + } + return Ok(ht); + } + /// + /// 修改 + /// + /// + /// + [HttpPost("/edit")] + public ActionResult Edit([FromBody]JObject jobject) + { + JObject ht = new JObject(); + ht.Add("code", "200"); + ht.Add("msg", "success"); + try + { + foreach (var item in jobject) { - foreach (var item in jobject) + string key = item.Key.Trim(); + var role = _identitySvc.GetRole(); + if (!role.Update.Table.Contains(key, StringComparer.CurrentCultureIgnoreCase)) { - string key = item.Key.Trim(); - var role = _identitySvc.GetRole(); - if (!role.Update.Table.Contains(key, StringComparer.CurrentCultureIgnoreCase)) - { - ht["code"] = "500"; - ht["msg"] = $"没权限修改{key}"; - break; - } - var value = JObject.Parse(item.Value.ToString()); - if (!value.ContainsKey("id")) - { - ht["code"] = "500"; - ht["msg"] = "未传主键id"; - break; - } + ht["code"] = "500"; + ht["msg"] = $"没权限修改{key}"; + break; + } + var value = JObject.Parse(item.Value.ToString()); + if (!value.ContainsKey("id")) + { + ht["code"] = "500"; + ht["msg"] = "未传主键id"; + break; + } - var dt = new Dictionary(); - foreach (var f in value) + var dt = new Dictionary(); + foreach (var f in value) + { + if (f.Key.ToLower() != "id" && selectTable.IsCol(key, f.Key) && (role.Update.Column.Contains("*") || role.Update.Column.Contains(f.Key, StringComparer.CurrentCultureIgnoreCase))) { - if (f.Key.ToLower() != "id" && selectTable.IsCol(key, f.Key) && (role.Update.Column.Contains("*") || role.Update.Column.Contains(f.Key, StringComparer.CurrentCultureIgnoreCase))) - { - dt.Add(f.Key, f.Value.ToString()); - } + dt.Add(f.Key, f.Value.ToString()); } - db.Db.Updateable(dt).AS(key).Where("id=@id", new { id = value["id"].ToString() }).ExecuteCommand(); - ht.Add(key, JToken.FromObject(new { code = 200, msg = "success", id = value["id"].ToString() })); } + db.Db.Updateable(dt).AS(key).Where("id=@id", new { id = value["id"].ToString() }).ExecuteCommand(); + ht.Add(key, JToken.FromObject(new { code = 200, msg = "success", id = value["id"].ToString() })); } - catch (Exception ex) - { + } + catch (Exception ex) + { - ht["code"] = "500"; - ht["msg"] = ex.Message; - } - return Ok(ht); + ht["code"] = "500"; + ht["msg"] = ex.Message; } - /// - /// 删除 - /// - /// - /// - [HttpPost("/remove")] - public ActionResult Remove([FromBody]JObject jobject) + return Ok(ht); + } + /// + /// 删除 + /// + /// + /// + [HttpPost("/remove")] + public ActionResult Remove([FromBody]JObject jobject) + { + JObject ht = new JObject(); + ht.Add("code", "200"); + ht.Add("msg", "success"); + try { - JObject ht = new JObject(); - ht.Add("code", "200"); - ht.Add("msg", "success"); - try + var role = _identitySvc.GetRole(); + foreach (var item in jobject) { - var role = _identitySvc.GetRole(); - foreach (var item in jobject) + string key = item.Key.Trim(); + var value = JObject.Parse(item.Value.ToString()); + var sb = new System.Text.StringBuilder(100); + sb.Append($"delete FROM {key} where "); + if (role.Delete == null || role.Delete.Table == null) { - string key = item.Key.Trim(); - var value = JObject.Parse(item.Value.ToString()); - var sb = new System.Text.StringBuilder(100); - sb.Append($"delete FROM {key} where "); - if (role.Delete == null || role.Delete.Table == null) - { - ht["code"] = "500"; - ht["msg"] = "delete权限未配置"; - break; - } - if (!role.Delete.Table.Contains(key, StringComparer.CurrentCultureIgnoreCase)) - { - ht["code"] = "500"; - ht["msg"] = $"没权限删除{key}"; - break; - } - if (!value.ContainsKey("id")) - { - ht["code"] = "500"; - ht["msg"] = "未传主键id"; - break; - } - var p = new List(); - foreach (var f in value) - { - sb.Append($"{f.Key}=@{f.Key},"); - p.Add(new SugarParameter($"@{f.Key}", f.Value.ToString())); - } - string sql = sb.ToString().TrimEnd(','); - db.Db.Ado.ExecuteCommand(sql, p); - ht.Add(key, JToken.FromObject(new { code = 200, msg = "success", id = value["id"].ToString() })); - + ht["code"] = "500"; + ht["msg"] = "delete权限未配置"; + break; } - } - catch (Exception ex) - { + if (!role.Delete.Table.Contains(key, StringComparer.CurrentCultureIgnoreCase)) + { + ht["code"] = "500"; + ht["msg"] = $"没权限删除{key}"; + break; + } + if (!value.ContainsKey("id")) + { + ht["code"] = "500"; + ht["msg"] = "未传主键id"; + break; + } + var p = new List(); + foreach (var f in value) + { + sb.Append($"{f.Key}=@{f.Key},"); + p.Add(new SugarParameter($"@{f.Key}", f.Value.ToString())); + } + string sql = sb.ToString().TrimEnd(','); + db.Db.Ado.ExecuteCommand(sql, p); + ht.Add(key, JToken.FromObject(new { code = 200, msg = "success", id = value["id"].ToString() })); - ht["code"] = "500"; - ht["msg"] = ex.Message; } - return Ok(ht); } + catch (Exception ex) + { + + ht["code"] = "500"; + ht["msg"] = ex.Message; + } + return Ok(ht); } } \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.NET/Controllers/TokenController.cs b/APIJSON.NET/APIJSON.NET/Controllers/TokenController.cs index 2979019..4256291 100644 --- a/APIJSON.NET/APIJSON.NET/Controllers/TokenController.cs +++ b/APIJSON.NET/APIJSON.NET/Controllers/TokenController.cs @@ -5,106 +5,104 @@ using System.Linq; using System.Security.Claims; using System.Text; -using System.Threading.Tasks; +using APIJSON.Data; +using APIJSON.NET.Data.Models; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Cors; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Newtonsoft.Json.Linq; +using Volo.Abp.AspNetCore.Mvc; -namespace APIJSON.NET.Controllers +namespace APIJSON.NET.Controllers; + +[Route("api/[controller]/[action]")] +[ApiController] +[Authorize] +public class TokenController : AbpControllerBase { - [Route("api/[controller]/[action]")] - [ApiController] - [Authorize] - [EnableCors("localhost")] - public class TokenController : ControllerBase + private DbContext db; + private readonly IOptions _configuration; + public TokenController(DbContext _db, IOptions configuration) { - private DbContext db; - private readonly IOptions _configuration; - public TokenController(DbContext _db, IOptions configuration) - { - _configuration = configuration; - db = _db; - } - [HttpPost("/token")] - [AllowAnonymous] - public ActionResult Create([FromBody]TokenInput input) + _configuration = configuration; + db = _db; + } + [HttpPost("/token")] + [AllowAnonymous] + public ActionResult Create([FromBody]TokenInput input) + { + JObject ht = new JObject(); + ht.Add("code", "200"); + ht.Add("msg", "success"); + var us = db.LoginDb.GetSingle(it => it.userName == input.username); + if (us==null) { - JObject ht = new JObject(); - ht.Add("code", "200"); - ht.Add("msg", "success"); - var us = db.LoginDb.GetSingle(it => it.userName == input.username); - if (us==null) - { - ht["code"] = "201"; - ht["msg"] = "用户名或者密码错误!"; - return Ok(ht); - } - string str = SimpleStringCipher.Instance.Encrypt(input.password,null, Encoding.ASCII.GetBytes(us.passWordSalt)); - if (!us.passWord.Equals(str)) - { - ht["code"]="201"; - ht["msg"]= "用户名或者密码错误!"; - return Ok(ht); - } - var identity = new ClaimsIdentity(); - identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, us.userId.ToString(CultureInfo.InvariantCulture))); - identity.AddClaim(new Claim(ClaimTypes.Name, us.userId.ToString(CultureInfo.InvariantCulture))); - identity.AddClaim(new Claim(ClaimTypes.Role, us.roleCode.ToString(CultureInfo.InvariantCulture))); - var claims = identity.Claims.ToList(); - - claims.AddRange(new[] - { - new Claim(JwtRegisteredClaimNames.Sub,us.userId.ToString(CultureInfo.InvariantCulture)), - new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), - new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64) - }); - - var accessToken = CreateAccessToken(claims); - - var data = new AuthenticateResultModel() - { - AccessToken = accessToken, - ExpireInSeconds = (int)_configuration.Value.Expiration.TotalSeconds - }; - - ht.Add("data", JToken.FromObject(data)); + ht["code"] = "201"; + ht["msg"] = "用户名或者密码错误!"; return Ok(ht); } - [HttpGet] - public ActionResult GetRole() + string str = SimpleStringCipher.Instance.Encrypt(input.password,null, Encoding.ASCII.GetBytes(us.passWordSalt)); + if (!us.passWord.Equals(str)) { - return Ok(User.FindFirstValue(ClaimTypes.Role)); + ht["code"]="201"; + ht["msg"]= "用户名或者密码错误!"; + return Ok(ht); } - private string CreateAccessToken(IEnumerable claims, TimeSpan? expiration = null) + var identity = new ClaimsIdentity(); + identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, us.userId.ToString(CultureInfo.InvariantCulture))); + identity.AddClaim(new Claim(ClaimTypes.Name, us.userId.ToString(CultureInfo.InvariantCulture))); + identity.AddClaim(new Claim(ClaimTypes.Role, us.roleCode.ToString(CultureInfo.InvariantCulture))); + var claims = identity.Claims.ToList(); + + claims.AddRange(new[] { - var now = DateTime.UtcNow; + new Claim(JwtRegisteredClaimNames.Sub,us.userId.ToString(CultureInfo.InvariantCulture)), + new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), + new Claim(JwtRegisteredClaimNames.Iat, DateTimeOffset.Now.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64) + }); - var jwtSecurityToken = new JwtSecurityToken( - issuer: _configuration.Value.Issuer, - audience: _configuration.Value.Audience, - claims: claims, - notBefore: now, - expires: now.Add(expiration ?? _configuration.Value.Expiration), - signingCredentials: _configuration.Value.SigningCredentials - ); + var accessToken = CreateAccessToken(claims); - return new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken); - } + var data = new AuthenticateResultModel() + { + AccessToken = accessToken, + ExpireInSeconds = (int)_configuration.Value.Expiration.TotalSeconds + }; + + ht.Add("data", JToken.FromObject(data)); + return Ok(ht); } - public class TokenInput + [HttpGet] + public ActionResult GetRole() { - public string username { get; set; } - public string password { get; set; } + return Ok(User.FindFirstValue(ClaimTypes.Role)); } - public class AuthenticateResultModel + private string CreateAccessToken(IEnumerable claims, TimeSpan? expiration = null) { - public string AccessToken { get; set; } - - public int ExpireInSeconds { get; set; } - + var now = DateTime.UtcNow; + + var jwtSecurityToken = new JwtSecurityToken( + issuer: _configuration.Value.Issuer, + audience: _configuration.Value.Audience, + claims: claims, + notBefore: now, + expires: now.Add(expiration ?? _configuration.Value.Expiration), + signingCredentials: _configuration.Value.SigningCredentials + ); + return new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken); } +} +public class TokenInput +{ + public string username { get; set; } + public string password { get; set; } +} +public class AuthenticateResultModel +{ + public string AccessToken { get; set; } + + public int ExpireInSeconds { get; set; } + + } \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.NET/Data/DbContext.cs b/APIJSON.NET/APIJSON.NET/Data/DbContext.cs deleted file mode 100644 index d3c8754..0000000 --- a/APIJSON.NET/APIJSON.NET/Data/DbContext.cs +++ /dev/null @@ -1,44 +0,0 @@ -using APIJSON.NET.Models; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Options; -using SqlSugar; -using System; -using System.Collections.Generic; - -namespace APIJSON.NET -{ - public class DbContext - { - public DbContext(IConfiguration options) - { - Db = new SqlSugarClient(new ConnectionConfig() - { - ConnectionString = options.GetConnectionString("ConnectionString"), - DbType = (DbType)Enum.Parse(typeof(SqlSugar.DbType), options.GetConnectionString("DbType")), InitKeyType= InitKeyType.Attribute, - IsAutoCloseConnection = true - }); - Db.Aop.OnLogExecuted = (sql, pars) => //SQL执行完事件 - { - - }; - Db.Aop.OnLogExecuting = (sql, pars) => //SQL执行前事件 - { - - }; - } - public SqlSugarClient Db; - public DbSet LoginDb { get { return new DbSet(Db); } } - } - public class DbSet : SimpleClient where T : class, new() - { - public DbSet(SqlSugarClient context) : base(context) - { - - } - public List GetByIds(dynamic[] ids) - { - return Context.Queryable().In(ids).ToList(); ; - } - } - -} diff --git a/APIJSON.NET/APIJSON.NET/Dockerfile b/APIJSON.NET/APIJSON.NET/Dockerfile index f2e1229..297ac0f 100644 --- a/APIJSON.NET/APIJSON.NET/Dockerfile +++ b/APIJSON.NET/APIJSON.NET/Dockerfile @@ -1,7 +1,26 @@ -FROM microsoft/dotnet:2.1.2-aspnetcore-runtime +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base +USER app WORKDIR /app +EXPOSE 8080 +EXPOSE 8081 + +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build +ARG BUILD_CONFIGURATION=Release +WORKDIR /src +COPY ["APIJSON.NET/APIJSON.NET.csproj", "APIJSON.NET/"] +COPY ["APIJSONCommon/ApiJson.Common.csproj", "APIJSONCommon/"] +RUN dotnet restore "./APIJSON.NET/./APIJSON.NET.csproj" COPY . . +WORKDIR "/src/APIJSON.NET" +RUN dotnet build "./APIJSON.NET.csproj" -c $BUILD_CONFIGURATION -o /app/build + +FROM build AS publish +ARG BUILD_CONFIGURATION=Release +RUN dotnet publish "./APIJSON.NET.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false - -ENTRYPOINT ["dotnet", "APIJSON.NET.dll"] +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "APIJSON.NET.dll"] \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.NET/Infrastructure/JwtTokenMiddleware.cs b/APIJSON.NET/APIJSON.NET/Infrastructure/JwtTokenMiddleware.cs deleted file mode 100644 index 061b999..0000000 --- a/APIJSON.NET/APIJSON.NET/Infrastructure/JwtTokenMiddleware.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Authentication.JwtBearer; -using Microsoft.AspNetCore.Builder; - -namespace APIJSON.NET -{ - public static class JwtTokenMiddleware - { - public static IApplicationBuilder UseJwtTokenMiddleware(this IApplicationBuilder app) - { - return app.Use(async (ctx, next) => - { - if (ctx.User.Identity?.IsAuthenticated != true) - { - var result = await ctx.AuthenticateAsync("JwtBearer"); - if (result.Succeeded && result.Principal != null) - { - ctx.User = result.Principal; - } - } - - await next(); - }); - } - } -} diff --git a/APIJSON.NET/APIJSON.NET/Infrastructure/SimpleStringCipher.cs b/APIJSON.NET/APIJSON.NET/Infrastructure/SimpleStringCipher.cs deleted file mode 100644 index eb4ae39..0000000 --- a/APIJSON.NET/APIJSON.NET/Infrastructure/SimpleStringCipher.cs +++ /dev/null @@ -1,138 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Security.Cryptography; -using System.Text; -using System.Threading.Tasks; - -namespace APIJSON.NET -{ - public class SimpleStringCipher - { - public static SimpleStringCipher Instance { get; } - - /// - /// This constant string is used as a "salt" value for the PasswordDeriveBytes function calls. - /// This size of the IV (in bytes) must = (keysize / 8). Default keysize is 256, so the IV must be - /// 32 bytes long. Using a 16 character string here gives us 32 bytes when converted to a byte array. - /// - public byte[] InitVectorBytes; - - /// - /// Default password to encrypt/decrypt texts. - /// It's recommented to set to another value for security. - /// Default value: "gsKnGZ041HLL4IM8" - /// - public static string DefaultPassPhrase { get; set; } - - /// - /// Default value: Encoding.ASCII.GetBytes("jkE49230Tf093b42") - /// - public static byte[] DefaultInitVectorBytes { get; set; } - - /// - /// Default value: Encoding.ASCII.GetBytes("hgt!16kl") - /// - public static byte[] DefaultSalt { get; set; } - - /// - /// This constant is used to determine the keysize of the encryption algorithm. - /// - public const int Keysize = 256; - - static SimpleStringCipher() - { - DefaultPassPhrase = "gsKnGZ041HLL4IM9"; - DefaultInitVectorBytes = Encoding.ASCII.GetBytes("jkE49230Tf093b42"); - DefaultSalt = Encoding.ASCII.GetBytes("hgt!11kl"); - Instance = new SimpleStringCipher(); - } - - public SimpleStringCipher() - { - InitVectorBytes = DefaultInitVectorBytes; - } - - public string Encrypt(string plainText, string passPhrase = null, byte[] salt = null) - { - if (plainText == null) - { - return null; - } - - if (passPhrase == null) - { - passPhrase = DefaultPassPhrase; - } - - if (salt == null) - { - salt = DefaultSalt; - } - - var plainTextBytes = Encoding.UTF8.GetBytes(plainText); - using (var password = new Rfc2898DeriveBytes(passPhrase, salt)) - { - var keyBytes = password.GetBytes(Keysize / 8); - using (var symmetricKey = Aes.Create()) - { - symmetricKey.Mode = CipherMode.CBC; - using (var encryptor = symmetricKey.CreateEncryptor(keyBytes, InitVectorBytes)) - { - using (var memoryStream = new MemoryStream()) - { - using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) - { - cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); - cryptoStream.FlushFinalBlock(); - var cipherTextBytes = memoryStream.ToArray(); - return Convert.ToBase64String(cipherTextBytes); - } - } - } - } - } - } - - public string Decrypt(string cipherText, string passPhrase = null, byte[] salt = null) - { - if (string.IsNullOrEmpty(cipherText)) - { - return null; - } - - if (passPhrase == null) - { - passPhrase = DefaultPassPhrase; - } - - if (salt == null) - { - salt = DefaultSalt; - } - - var cipherTextBytes = Convert.FromBase64String(cipherText); - using (var password = new Rfc2898DeriveBytes(passPhrase, salt)) - { - var keyBytes = password.GetBytes(Keysize / 8); - using (var symmetricKey = Aes.Create()) - { - symmetricKey.Mode = CipherMode.CBC; - using (var decryptor = symmetricKey.CreateDecryptor(keyBytes, InitVectorBytes)) - { - using (var memoryStream = new MemoryStream(cipherTextBytes)) - { - using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) - { - var plainTextBytes = new byte[cipherTextBytes.Length]; - var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); - return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); - } - } - } - } - } - } - } -} diff --git a/APIJSON.NET/APIJSON.NET/Logs/logs.txt b/APIJSON.NET/APIJSON.NET/Logs/logs.txt new file mode 100644 index 0000000..4f52f5f --- /dev/null +++ b/APIJSON.NET/APIJSON.NET/Logs/logs.txt @@ -0,0 +1,1491 @@ +2024-02-04 11:08:04.221 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:08:07.352 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:08:07.353 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:08:07.353 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:08:07.890 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:09:22.623 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:09:24.232 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:09:24.233 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:09:24.233 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:09:24.536 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:15:37.016 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:15:38.749 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:15:38.750 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:15:38.750 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:15:38.751 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:15:38.751 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:15:38.751 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:15:39.027 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:15:56.937 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:15:58.558 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:15:58.559 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:15:58.559 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:15:58.887 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:18:32.544 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:18:34.289 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:18:34.290 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:18:34.290 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:18:34.641 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:23:04.119 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:23:05.977 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:23:05.978 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:23:05.978 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:23:06.289 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:24:23.469 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:24:25.014 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:24:25.015 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:24:25.015 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:24:25.330 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:27:00.865 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:27:02.613 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:27:02.614 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:27:02.614 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:27:02.894 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:28:15.811 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 11:28:17.591 +08:00 [INF] Loaded ABP modules: +2024-02-04 11:28:17.592 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 11:28:17.592 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 11:28:17.865 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 11:28:20.705 +08:00 [INF] Initialized all ABP modules. +2024-02-04 11:28:20.873 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv4 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 11:28:20.874 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv6 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 11:28:20.881 +08:00 [ERR] Hosting failed to start +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 11:28:20.910 +08:00 [FTL] Host terminated unexpectedly! +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:33:07.600 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 12:33:09.298 +08:00 [INF] Loaded ABP modules: +2024-02-04 12:33:09.299 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 12:33:09.299 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 12:33:09.576 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 12:33:10.388 +08:00 [INF] Initialized all ABP modules. +2024-02-04 12:33:10.527 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv4 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:33:10.529 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv6 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:33:10.536 +08:00 [ERR] Hosting failed to start +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:33:10.562 +08:00 [FTL] Host terminated unexpectedly! +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:34:34.568 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 12:34:36.444 +08:00 [INF] Loaded ABP modules: +2024-02-04 12:34:36.444 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 12:34:36.445 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 12:34:36.735 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 12:34:37.549 +08:00 [INF] Initialized all ABP modules. +2024-02-04 12:34:37.667 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv4 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:34:37.668 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv6 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:34:37.674 +08:00 [ERR] Hosting failed to start +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:34:37.703 +08:00 [FTL] Host terminated unexpectedly! +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:36:06.186 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 12:36:07.838 +08:00 [INF] Loaded ABP modules: +2024-02-04 12:36:07.839 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 12:36:07.839 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 12:36:07.840 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 12:36:08.113 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 12:36:08.881 +08:00 [INF] Initialized all ABP modules. +2024-02-04 12:36:08.991 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv4 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:36:08.992 +08:00 [INF] Unable to bind to https://localhost:49796 on the IPv6 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:36:08.997 +08:00 [ERR] Hosting failed to start +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:36:09.024 +08:00 [FTL] Host terminated unexpectedly! +System.IO.IOException: Failed to bind to address https://localhost:49796. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:36:28.324 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 12:36:30.059 +08:00 [INF] Loaded ABP modules: +2024-02-04 12:36:30.060 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 12:36:30.060 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 12:36:30.329 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 12:36:31.096 +08:00 [INF] Initialized all ABP modules. +2024-02-04 12:36:31.208 +08:00 [INF] Unable to bind to https://localhost:49786 on the IPv4 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:36:31.208 +08:00 [INF] Unable to bind to https://localhost:49786 on the IPv6 loopback interface: '以一种访问权限不允许的方式做了一个访问套接字的尝试。'. +2024-02-04 12:36:31.215 +08:00 [ERR] Hosting failed to start +System.IO.IOException: Failed to bind to address https://localhost:49786. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 12:36:31.245 +08:00 [FTL] Host terminated unexpectedly! +System.IO.IOException: Failed to bind to address https://localhost:49786. + ---> System.AggregateException: One or more errors occurred. (以一种访问权限不允许的方式做了一个访问套接字的尝试。) (以一种访问权限不允许的方式做了一个访问套接字的尝试。) + ---> System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + --- End of inner exception stack trace --- + ---> (Inner Exception #1) System.Net.Sockets.SocketException (10013): 以一种访问权限不允许的方式做了一个访问套接字的尝试。 + at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) + at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress) + at System.Net.Sockets.Socket.Bind(EndPoint localEP) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportOptions.CreateDefaultBoundListenSocket(EndPoint endpoint) + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketConnectionListener.Bind() + at Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketTransportFactory.BindAsync(EndPoint endpoint, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure.TransportManager.BindAsync(EndPoint endPoint, ConnectionDelegate connectionDelegate, EndpointConfig endpointConfig, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.<>c__DisplayClass28_0`1.<g__OnBind|0>d.MoveNext() +--- End of stack trace from previous location --- + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindEndpointAsync(ListenOptions endpoint, AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken)<--- + + --- End of inner exception stack trace --- + at Microsoft.AspNetCore.Server.Kestrel.Core.LocalhostListenOptions.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.AddressesStrategy.BindAsync(AddressBindContext context, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.AddressBinder.BindAsync(ListenOptions[] listenOptions, AddressBindContext context, Func`2 useHttps, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.BindAsync(CancellationToken cancellationToken) + at Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl.StartAsync[TContext](IHttpApplication`1 application, CancellationToken cancellationToken) + at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token) + at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable`1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List`1 exceptions, Func`3 operation) + at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) + at APIJSON.NET.Program.Main(String[] args) in E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\Program.cs:line 36 +2024-02-04 13:24:01.883 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 13:24:03.930 +08:00 [INF] Loaded ABP modules: +2024-02-04 13:24:03.930 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 13:24:03.930 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 13:24:03.931 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 13:24:04.366 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 13:24:05.279 +08:00 [INF] Initialized all ABP modules. +2024-02-04 13:24:05.460 +08:00 [INF] Now listening on: https://localhost:42786 +2024-02-04 13:24:05.460 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2024-02-04 13:24:05.460 +08:00 [INF] Hosting environment: Development +2024-02-04 13:24:05.460 +08:00 [INF] Content root path: E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET +2024-02-04 13:24:09.244 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/ - null null +2024-02-04 13:24:09.607 +08:00 [INF] Executing endpoint 'APIJSON.NET.Controllers.HomeController.Index (APIJSON.NET)' +2024-02-04 13:24:09.640 +08:00 [INF] Route matched with {action = "Index", controller = "Home", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Index() on controller APIJSON.NET.Controllers.HomeController (APIJSON.NET). +2024-02-04 13:24:09.759 +08:00 [INF] Executing action method APIJSON.NET.Controllers.HomeController.Index (APIJSON.NET) - Validation state: "Valid" +2024-02-04 13:24:09.762 +08:00 [INF] Executed action method APIJSON.NET.Controllers.HomeController.Index (APIJSON.NET), returned result Microsoft.AspNetCore.Mvc.VirtualFileResult in 0.4545ms. +2024-02-04 13:24:09.773 +08:00 [INF] Executing VirtualFileResult, sending file './index.html' with download name '' ... +2024-02-04 13:24:09.808 +08:00 [INF] Executed action APIJSON.NET.Controllers.HomeController.Index (APIJSON.NET) in 165.4196ms +2024-02-04 13:24:09.809 +08:00 [INF] Executed endpoint 'APIJSON.NET.Controllers.HomeController.Index (APIJSON.NET)' +2024-02-04 13:24:09.810 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/css/hint.min.css - null null +2024-02-04 13:24:09.810 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/css/loading.css - null null +2024-02-04 13:24:09.812 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/css/main.css - null null +2024-02-04 13:24:09.820 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/vue.min.js - null null +2024-02-04 13:24:09.821 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/jquery.js - null null +2024-02-04 13:24:09.829 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/jsonlint.js - null null +2024-02-04 13:24:09.876 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/editor.js - null null +2024-02-04 13:24:09.876 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/parse.js - null null +2024-02-04 13:24:09.947 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/localforage.min.js - null null +2024-02-04 13:24:09.959 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/FileSaver.js - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/helper.js - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/uuid.js - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/main.js - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/js/clipboard.min.js - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/svg/icon.svg - null null +2024-02-04 13:24:09.974 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_vs/browserLink - null null +2024-02-04 13:24:09.978 +08:00 [INF] Sending file. Request path: '/js/editor.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\editor.js' +2024-02-04 13:24:09.978 +08:00 [INF] Sending file. Request path: '/css/loading.css'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\css\loading.css' +2024-02-04 13:24:09.978 +08:00 [INF] Sending file. Request path: '/js/parse.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\parse.js' +2024-02-04 13:24:09.979 +08:00 [INF] Sending file. Request path: '/css/hint.min.css'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\css\hint.min.css' +2024-02-04 13:24:09.980 +08:00 [INF] Sending file. Request path: '/css/main.css'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\css\main.css' +2024-02-04 13:24:09.981 +08:00 [INF] Sending file. Request path: '/js/jsonlint.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\jsonlint.js' +2024-02-04 13:24:09.981 +08:00 [INF] Sending file. Request path: '/js/FileSaver.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\FileSaver.js' +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/css/hint.min.css - 200 9631 text/css 170.5663ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/css/main.css - 200 8617 text/css 169.3931ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/FileSaver.js - 200 12533 application/javascript 23.2624ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/parse.js - 200 1903 application/javascript 103.4859ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/ - 200 null text/html 741.4393ms +2024-02-04 13:24:09.982 +08:00 [INF] Sending file. Request path: '/js/helper.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\helper.js' +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/css/loading.css - 200 2012 text/css 169.4139ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/jsonlint.js - 200 8831 application/javascript 152.9287ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/editor.js - 200 964 application/javascript 103.5691ms +2024-02-04 13:24:09.982 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/helper.js - 200 314 application/javascript 8.5496ms +2024-02-04 13:24:09.985 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - 200 13758 application/javascript; charset=utf-8 10.8048ms +2024-02-04 13:24:10.023 +08:00 [INF] Sending file. Request path: '/js/uuid.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\uuid.js' +2024-02-04 13:24:10.023 +08:00 [INF] Sending file. Request path: '/js/clipboard.min.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\clipboard.min.js' +2024-02-04 13:24:10.023 +08:00 [INF] Sending file. Request path: '/js/localforage.min.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\localforage.min.js' +2024-02-04 13:24:10.023 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/uuid.js - 200 2332 application/javascript 50.2195ms +2024-02-04 13:24:10.023 +08:00 [INF] Sending file. Request path: '/js/main.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\main.js' +2024-02-04 13:24:10.023 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/clipboard.min.js - 200 10923 application/javascript 50.1902ms +2024-02-04 13:24:10.023 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/localforage.min.js - 200 25354 application/javascript 76.9606ms +2024-02-04 13:24:10.024 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/main.js - 200 10840 application/javascript 49.5733ms +2024-02-04 13:24:10.024 +08:00 [INF] Sending file. Request path: '/svg/icon.svg'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\svg\icon.svg' +2024-02-04 13:24:10.025 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/svg/icon.svg - 200 16669 image/svg+xml 50.2147ms +2024-02-04 13:24:10.026 +08:00 [INF] Sending file. Request path: '/js/vue.min.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\vue.min.js' +2024-02-04 13:24:10.026 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/vue.min.js - 200 72070 application/javascript 206.547ms +2024-02-04 13:24:10.034 +08:00 [INF] Sending file. Request path: '/js/jquery.js'. Physical path: 'E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET\wwwroot\js\jquery.js' +2024-02-04 13:24:10.034 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/js/jquery.js - 200 276875 application/javascript 213.8547ms +2024-02-04 13:24:10.135 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_vs/browserLink - 200 null text/javascript; charset=UTF-8 160.4953ms +2024-02-04 13:24:10.149 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/favicon.ico - null null +2024-02-04 13:24:10.154 +08:00 [INF] Executing endpoint '405 HTTP Method Not Supported' +2024-02-04 13:24:10.154 +08:00 [INF] Executed endpoint '405 HTTP Method Not Supported' +2024-02-04 13:24:10.154 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/favicon.ico - 405 0 null 5.4415ms +2024-02-04 13:24:19.899 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/favicon.ico - null null +2024-02-04 13:24:19.901 +08:00 [INF] Executing endpoint '405 HTTP Method Not Supported' +2024-02-04 13:24:19.901 +08:00 [INF] Executed endpoint '405 HTTP Method Not Supported' +2024-02-04 13:24:19.901 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/favicon.ico - 405 0 null 2.8212ms +2024-02-04 15:23:50.160 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 15:23:51.820 +08:00 [INF] Loaded ABP modules: +2024-02-04 15:23:51.821 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 15:23:51.821 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 15:23:52.130 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 15:24:59.065 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 15:25:00.673 +08:00 [INF] Loaded ABP modules: +2024-02-04 15:25:00.673 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 15:25:00.673 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 15:25:00.674 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 15:25:00.674 +08:00 [INF] - APIJSON.NET.SqlSugar.ApiJsonNetDataModule +2024-02-04 15:25:00.989 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 15:25:01.767 +08:00 [INF] Initialized all ABP modules. +2024-02-04 15:25:01.886 +08:00 [INF] Now listening on: https://localhost:42786 +2024-02-04 15:25:01.886 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2024-02-04 15:25:01.886 +08:00 [INF] Hosting environment: Development +2024-02-04 15:25:01.886 +08:00 [INF] Content root path: E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET +2024-02-04 15:25:12.932 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - null null +2024-02-04 15:25:12.932 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_vs/browserLink - null null +2024-02-04 15:25:12.956 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - 200 13758 application/javascript; charset=utf-8 23.8275ms +2024-02-04 15:25:12.990 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_vs/browserLink - 200 null text/javascript; charset=UTF-8 61.6177ms +2024-02-04 15:25:13.027 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/favicon.ico - null null +2024-02-04 15:25:13.145 +08:00 [INF] Executing endpoint '405 HTTP Method Not Supported' +2024-02-04 15:25:13.145 +08:00 [INF] Executed endpoint '405 HTTP Method Not Supported' +2024-02-04 15:25:13.148 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/favicon.ico - 405 0 null 121.7504ms +2024-02-04 15:47:22.194 +08:00 [INF] Starting APIJSON.NET.Host. +2024-02-04 15:47:24.493 +08:00 [INF] Loaded ABP modules: +2024-02-04 15:47:24.494 +08:00 [INF] - APIJSON.NET.AppModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Data.AbpDataModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.UI.AbpUiModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule +2024-02-04 15:47:24.494 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule +2024-02-04 15:47:24.495 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule +2024-02-04 15:47:24.495 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule +2024-02-04 15:47:24.495 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule +2024-02-04 15:47:24.495 +08:00 [INF] - APIJSON.Data.ApiJsonNetDataModule +2024-02-04 15:47:24.780 +08:00 [INF] User profile is available. Using 'C:\Users\liaozb\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. +2024-02-04 15:47:25.532 +08:00 [INF] Initialized all ABP modules. +2024-02-04 15:47:25.651 +08:00 [INF] Now listening on: https://localhost:42786 +2024-02-04 15:47:25.651 +08:00 [INF] Application started. Press Ctrl+C to shut down. +2024-02-04 15:47:25.652 +08:00 [INF] Hosting environment: Development +2024-02-04 15:47:25.652 +08:00 [INF] Content root path: E:\Github\APIJSON.NET\APIJSON.NET\APIJSON.NET +2024-02-04 15:47:32.943 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - null null +2024-02-04 15:47:32.943 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_vs/browserLink - null null +2024-02-04 15:47:32.968 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - 200 13758 application/javascript; charset=utf-8 29.0063ms +2024-02-04 15:47:33.000 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_vs/browserLink - 200 null text/javascript; charset=UTF-8 61.8765ms +2024-02-04 15:47:33.025 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/favicon.ico - null null +2024-02-04 15:47:33.138 +08:00 [INF] Executing endpoint '405 HTTP Method Not Supported' +2024-02-04 15:47:33.139 +08:00 [INF] Executed endpoint '405 HTTP Method Not Supported' +2024-02-04 15:47:33.142 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/favicon.ico - 405 0 null 116.8573ms +2024-02-04 15:47:39.867 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger - null null +2024-02-04 15:47:40.108 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger - 301 0 null 240.6922ms +2024-02-04 15:47:40.111 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/index.html - null null +2024-02-04 15:47:40.191 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/index.html - 200 null text/html;charset=utf-8 79.9549ms +2024-02-04 15:47:40.197 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/swagger-ui.css - null null +2024-02-04 15:47:40.200 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/swagger-ui-bundle.js - null null +2024-02-04 15:47:40.200 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/ui/abp.swagger.js - null null +2024-02-04 15:47:40.200 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/ui/abp.js - null null +2024-02-04 15:47:40.200 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - null null +2024-02-04 15:47:40.200 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/swagger-ui-standalone-preset.js - null null +2024-02-04 15:47:40.209 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_framework/aspnetcore-browser-refresh.js - 200 13758 application/javascript; charset=utf-8 8.3443ms +2024-02-04 15:47:40.236 +08:00 [INF] Sending file. Request path: '/swagger/ui/abp.js'. Physical path: 'N/A' +2024-02-04 15:47:40.237 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/ui/abp.js - 200 3122 application/javascript 36.343ms +2024-02-04 15:47:40.245 +08:00 [INF] Sending file. Request path: '/swagger/ui/abp.swagger.js'. Physical path: 'N/A' +2024-02-04 15:47:40.247 +08:00 [INF] Sending file. Request path: '/swagger-ui.css'. Physical path: 'N/A' +2024-02-04 15:47:40.251 +08:00 [INF] Sending file. Request path: '/swagger-ui-standalone-preset.js'. Physical path: 'N/A' +2024-02-04 15:47:40.253 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/swagger-ui.css - 200 144929 text/css 56.0193ms +2024-02-04 15:47:40.253 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/ui/abp.swagger.js - 200 4375 application/javascript 53.1194ms +2024-02-04 15:47:40.253 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/swagger-ui-standalone-preset.js - 200 312163 text/javascript 52.6814ms +2024-02-04 15:47:40.262 +08:00 [INF] Sending file. Request path: '/swagger-ui-bundle.js'. Physical path: 'N/A' +2024-02-04 15:47:40.262 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/_vs/browserLink - null null +2024-02-04 15:47:40.263 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/swagger-ui-bundle.js - 200 1061536 text/javascript 62.882ms +2024-02-04 15:47:40.281 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/_vs/browserLink - 200 null text/javascript; charset=UTF-8 18.3651ms +2024-02-04 15:47:40.394 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/api/abp/application-configuration - null null +2024-02-04 15:47:40.396 +08:00 [INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' +2024-02-04 15:47:40.417 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/v1/swagger.json - null null +2024-02-04 15:47:40.425 +08:00 [INF] Request starting HTTP/2 GET https://localhost:42786/swagger/favicon-32x32.png - null null +2024-02-04 15:47:40.426 +08:00 [INF] Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A' +2024-02-04 15:47:40.427 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/favicon-32x32.png - 200 628 image/png 1.9458ms +2024-02-04 15:47:40.445 +08:00 [INF] Route matched with {area = "abp", action = "Get", controller = "AbpApplicationConfiguration"}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController (Volo.Abp.AspNetCore.Mvc). +2024-02-04 15:47:40.539 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/swagger/v1/swagger.json - 200 null application/json;charset=utf-8 121.9611ms +2024-02-04 15:47:40.588 +08:00 [INF] Executing action method Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc) - Validation state: "Valid" +2024-02-04 15:47:40.639 +08:00 [DBG] Executing AbpApplicationConfigurationAppService.GetAsync()... +2024-02-04 15:47:40.800 +08:00 [DBG] Executed AbpApplicationConfigurationAppService.GetAsync(). +2024-02-04 15:47:40.804 +08:00 [INF] Executed action method Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc), returned result Microsoft.AspNetCore.Mvc.ObjectResult in 213.9227ms. +2024-02-04 15:47:40.812 +08:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto'. +2024-02-04 15:47:40.844 +08:00 [INF] Executed action Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc) in 395.6075ms +2024-02-04 15:47:40.845 +08:00 [INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)' +2024-02-04 15:47:40.845 +08:00 [INF] Request finished HTTP/2 GET https://localhost:42786/api/abp/application-configuration - 200 null application/json; charset=utf-8 451.1174ms diff --git a/APIJSON.NET/APIJSON.NET/Models/Login.cs b/APIJSON.NET/APIJSON.NET/Models/Login.cs deleted file mode 100644 index c3f2be5..0000000 --- a/APIJSON.NET/APIJSON.NET/Models/Login.cs +++ /dev/null @@ -1,20 +0,0 @@ -using SqlSugar; -using System; - -namespace APIJSON.NET.Models -{ - public class Login - { - [SugarColumn(IsNullable = false, IsPrimaryKey = true)] - public int userId { get; set; } - [SugarColumn(Length =100,ColumnDescription ="用户名")] - public string userName { get; set; } - [SugarColumn(Length = 200, ColumnDescription = "密码")] - public string passWord { get; set; } - [SugarColumn(Length = 100, ColumnDescription = "密码盐")] - public string passWordSalt { get; set; } - [SugarColumn(Length = 100, ColumnDescription = "权限组")] - public string roleCode { get; set; } - - } -} diff --git a/APIJSON.NET/APIJSON.NET/Models/TokenAuthConfiguration.cs b/APIJSON.NET/APIJSON.NET/Models/TokenAuthConfiguration.cs deleted file mode 100644 index b9beade..0000000 --- a/APIJSON.NET/APIJSON.NET/Models/TokenAuthConfiguration.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Microsoft.IdentityModel.Tokens; -using System; - -namespace APIJSON.NET -{ - public class TokenAuthConfiguration - { - public SymmetricSecurityKey SecurityKey { get; set; } - - public string Issuer { get; set; } - - public string Audience { get; set; } - - public SigningCredentials SigningCredentials { get; set; } - - public TimeSpan Expiration { get; set; } - } -} diff --git a/APIJSON.NET/APIJSON.NET/Program.cs b/APIJSON.NET/APIJSON.NET/Program.cs index 2fa47dc..f19d9a1 100644 --- a/APIJSON.NET/APIJSON.NET/Program.cs +++ b/APIJSON.NET/APIJSON.NET/Program.cs @@ -1,19 +1,55 @@ -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; -using System.Net; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Serilog.Events; +using Serilog; +using System; +using System.Threading.Tasks; -namespace APIJSON.NET +namespace APIJSON.NET; +public class Program { - public class Program + public async static Task Main(string[] args) { - public static void Main(string[] args) + Log.Logger = new LoggerConfiguration() +#if DEBUG + .MinimumLevel.Debug() + .WriteTo.Async(c => c.Console()) +#else + .MinimumLevel.Information() +#endif + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .Enrich.FromLogContext() + .WriteTo.Async(c => c.File("Logs/logs.txt")) + .CreateLogger(); + + try { - CreateWebHostBuilder(args).Build().Run(); + Log.Information("Starting APIJSON.NET.Host."); + var builder = WebApplication.CreateBuilder(args); + builder.Host.AddAppSettingsSecretsJson() + .UseAutofac() + .UseSerilog(); + await builder.AddApplicationAsync(); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + await app.RunAsync(); + return 0; } + catch (Exception ex) + { + if (ex is HostAbortedException) + { + throw; + } - public static IWebHostBuilder CreateWebHostBuilder(string[] args) + Log.Fatal(ex, "Host terminated unexpectedly!"); + return 1; + } + finally { - return WebHost.CreateDefaultBuilder(args).UseStartup(); + Log.CloseAndFlush(); } } } + \ No newline at end of file diff --git a/APIJSON.NET/APIJSON.NET/Infrastructure/AuthConfigurer.cs b/APIJSON.NET/APIJSON.NET/Services/AuthConfigurer.cs similarity index 100% rename from APIJSON.NET/APIJSON.NET/Infrastructure/AuthConfigurer.cs rename to APIJSON.NET/APIJSON.NET/Services/AuthConfigurer.cs diff --git a/APIJSON.NET/APIJSON.NET/Data/DbInit.cs b/APIJSON.NET/APIJSON.NET/Services/DbInit.cs similarity index 59% rename from APIJSON.NET/APIJSON.NET/Data/DbInit.cs rename to APIJSON.NET/APIJSON.NET/Services/DbInit.cs index b80bdd2..ec8d7f4 100644 --- a/APIJSON.NET/APIJSON.NET/Data/DbInit.cs +++ b/APIJSON.NET/APIJSON.NET/Services/DbInit.cs @@ -1,20 +1,27 @@ -using APIJSON.NET.Models; +using APIJSON.Data; +using APIJSON.Data.Models; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; -using SqlSugar; using System; using System.Collections.Generic; using System.Text; -namespace APIJSON.NET + +namespace APIJSON.NET.Data; + +public static class DbInit { - public static class DbInit + /// + /// 初始化用户表和数据 + /// + /// + public static void Initialize(IApplicationBuilder app) { - public static void Initialize(IApplicationBuilder app) + using (var scope = app.ApplicationServices.CreateScope()) { - var db = app.ApplicationServices.GetRequiredService(); + var db = scope.ServiceProvider.GetRequiredService(); db.Db.CodeFirst.InitTables(typeof(Login)); - if (!db.LoginDb.IsAny(it=>it.userId>0)) + if (!db.LoginDb.IsAny(it => it.userId > 0)) { var ds = new List(); @@ -22,7 +29,7 @@ public static void Initialize(IApplicationBuilder app) { var d = new Login(); d.userId = i; - d.userName = "admin"+i.ToString(); + d.userName = "admin" + i.ToString(); d.passWordSalt = Guid.NewGuid().ToString(); d.passWord = SimpleStringCipher.Instance.Encrypt("123456", null, Encoding.ASCII.GetBytes(d.passWordSalt)); d.roleCode = "role1"; @@ -32,7 +39,8 @@ public static void Initialize(IApplicationBuilder app) } - } + + } } diff --git a/APIJSON.NET/APIJSON.NET/Services/IdentityService.cs b/APIJSON.NET/APIJSON.NET/Services/IdentityService.cs index dce67b4..d445443 100644 --- a/APIJSON.NET/APIJSON.NET/Services/IdentityService.cs +++ b/APIJSON.NET/APIJSON.NET/Services/IdentityService.cs @@ -1,4 +1,5 @@ -using APIJSON.NET.Models; +using APIJSON.Data; +using APIJSON.Data.Models; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; using System; @@ -7,28 +8,51 @@ using System.Security.Claims; using System.Text.RegularExpressions; using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; namespace APIJSON.NET.Services { - public class IdentityService : IIdentityService + /// + /// + /// + public class IdentityService : IIdentityService,ITransientDependency { private IHttpContextAccessor _context; private List roles; + /// + /// + /// + /// + /// public IdentityService(IHttpContextAccessor context, IOptions> _roles) { _context = context ?? throw new ArgumentNullException(nameof(context)); roles = _roles.Value; } + + /// + /// + /// + /// public string GetUserIdentity() { return _context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier); } + /// + /// + /// + /// public string GetUserRoleName() { return _context.HttpContext.User.FindFirstValue(ClaimTypes.Role); } + + /// + /// + /// + /// public Role GetRole() { var role = new Role(); @@ -43,23 +67,37 @@ public Role GetRole() } return role; } - public (bool, string) GetSelectRole(string table) + + /// + /// + /// + /// + /// + public Tuple GetSelectRole(string table) { var role = GetRole(); if (role == null || role.Select == null || role.Select.Table == null) { - return (false, $"appsettings.json权限配置不正确!"); + return Tuple.Create(false, $"appsettings.json权限配置不正确!"); } string tablerole = role.Select.Table.FirstOrDefault(it => it == "*" || it.Equals(table, StringComparison.CurrentCultureIgnoreCase)); if (string.IsNullOrEmpty(tablerole)) { - return (false, $"表名{table}没权限查询!"); + return Tuple.Create(false, $"表名{table}没权限查询!"); } int index = Array.IndexOf(role.Select.Table, tablerole); string selectrole = role.Select.Column[index]; - return (true, selectrole); + return Tuple.Create(true, selectrole); } + + + /// + /// + /// + /// + /// + /// public bool ColIsRole(string col, string[] selectrole) { if (selectrole.Contains("*")) diff --git a/APIJSON.NET/APIJSON.NET/Services/JwtTokenMiddleware.cs b/APIJSON.NET/APIJSON.NET/Services/JwtTokenMiddleware.cs new file mode 100644 index 0000000..fffc899 --- /dev/null +++ b/APIJSON.NET/APIJSON.NET/Services/JwtTokenMiddleware.cs @@ -0,0 +1,24 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Builder; + +namespace APIJSON.NET; + +public static class JwtTokenMiddleware +{ + public static IApplicationBuilder UseJwtTokenMiddleware(this IApplicationBuilder app) + { + return app.Use(async (ctx, next) => + { + if (ctx.User.Identity?.IsAuthenticated != true) + { + var result = await ctx.AuthenticateAsync("JwtBearer"); + if (result.Succeeded && result.Principal != null) + { + ctx.User = result.Principal; + } + } + + await next(); + }); + } +} diff --git a/APIJSON.NET/APIJSON.NET/Services/TokenAuthConfiguration.cs b/APIJSON.NET/APIJSON.NET/Services/TokenAuthConfiguration.cs new file mode 100644 index 0000000..e0b8d75 --- /dev/null +++ b/APIJSON.NET/APIJSON.NET/Services/TokenAuthConfiguration.cs @@ -0,0 +1,18 @@ +using Microsoft.IdentityModel.Tokens; +using System; +using Volo.Abp.DependencyInjection; + +namespace APIJSON.NET.Data.Models; + +public class TokenAuthConfiguration:ISingletonDependency +{ + public SymmetricSecurityKey SecurityKey { get; set; } + + public string Issuer { get; set; } + + public string Audience { get; set; } + + public SigningCredentials SigningCredentials { get; set; } + + public TimeSpan Expiration { get; set; } +} diff --git a/APIJSON.NET/APIJSON.NET/Startup.cs b/APIJSON.NET/APIJSON.NET/Startup.cs deleted file mode 100644 index 756a23c..0000000 --- a/APIJSON.NET/APIJSON.NET/Startup.cs +++ /dev/null @@ -1,93 +0,0 @@ -namespace APIJSON.NET -{ - using System; - using System.Collections.Generic; - using System.Text; - using APIJSON.NET.Models; - using APIJSON.NET.Services; - using Microsoft.AspNetCore.Builder; - using Microsoft.AspNetCore.Hosting; - using Microsoft.AspNetCore.Http; - using Microsoft.AspNetCore.Mvc; - using Microsoft.Extensions.Configuration; - using Microsoft.Extensions.DependencyInjection; - using Microsoft.IdentityModel.Tokens; - using Microsoft.OpenApi.Models; - using Swashbuckle.AspNetCore.Swagger; - - public class Startup - { - private const string _defaultCorsPolicyName = "localhost"; - 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>(Configuration.GetSection("RoleList")); - services.Configure>(Configuration.GetSection("tablempper")); - services.Configure(tokenAuthConfig => - { - tokenAuthConfig.SecurityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Authentication:JwtBearer:SecurityKey"])); - tokenAuthConfig.Issuer = Configuration["Authentication:JwtBearer:Issuer"]; - tokenAuthConfig.Audience = Configuration["Authentication:JwtBearer:Audience"]; - tokenAuthConfig.SigningCredentials = new SigningCredentials(tokenAuthConfig.SecurityKey, SecurityAlgorithms.HmacSha256); - tokenAuthConfig.Expiration = TimeSpan.FromDays(1); - }); - AuthConfigurer.Configure(services, Configuration); - - var origins = Configuration.GetSection("CorsUrls").Value.Split(","); - services.AddCors( options => options.AddPolicy( _defaultCorsPolicyName, - builder => - builder.WithOrigins(origins) - .AllowAnyHeader() - .AllowAnyMethod().AllowCredentials() - )); - services.AddControllers() - .AddNewtonsoftJson(options => - { - options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; - options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; - }); ; - services.AddSwaggerGen(c => - { - c.SwaggerDoc("v1", new OpenApiInfo { Title = "APIJSON.NET", Version = "v1" }); - }); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); - - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) - { - - app.UseAuthentication(); - - app.UseRouting(); - app.UseStaticFiles(); - app.UseCors(_defaultCorsPolicyName); - app.UseSwagger(); - app.UseSwaggerUI(c => - { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); - - }); - app.UseEndpoints(endpoints => - { - endpoints.MapControllers(); - }); - app.UseJwtTokenMiddleware(); - DbInit.Initialize(app); - } - } -} diff --git a/APIJSON.NET/APIJSON.NET/appsettings.json b/APIJSON.NET/APIJSON.NET/appsettings.json index 610c96b..f6ffb5e 100644 --- a/APIJSON.NET/APIJSON.NET/appsettings.json +++ b/APIJSON.NET/APIJSON.NET/appsettings.json @@ -1,7 +1,7 @@ { "ConnectionStrings": { "DbType": 0, //0:MySql,1:SqlServer,2:Sqlite - "ConnectionString": "Server=192.168.2.25;Database=yunwei;Uid=root;Pwd=xmjk;Port=3306;Character Set=utf8;" + "ConnectionString": "Server=localhost;Port=3306;Database=APIJSON_NET;Uid=root;Pwd=admin;" //"ConnectionString": "Server=119.29.9.25;Port=3306;Database=test;Uid=root;Pwd=1q,2w.3e?;CharSet=UTF8;" }, "CorsUrls": "http://localhost:5000,http://localhost5001", @@ -15,21 +15,21 @@ }, "RoleList": [ { - "name": "role1", //Ȩ������ Ψһ - "select": { //��ѯȨ�� - "table": [ "moment", "User", "Comment" ], //�ɲ����ı� - "column": [ "*", "*", "*" ], //�ɲ������ֶ� + "name": "role1", //权限名称 唯一 + "select": { //查询权限 + "table": [ "*" ], //可操作的表 + "column": [ "*" ], //可操作的字段 "where": [] }, - "update": { //�޸�Ȩ�� + "update": { //修改权限 "table": [ "moment", "User", "Comment" ], "column": [ "*", "*", "*" ] }, - "insert": { //����Ȩ�� + "insert": { //添加权限 "table": [ "moment", "User", "Comment" ], "column": [ "*", "*", "*" ] }, - "delete": { //ɾ��Ȩ�� + "delete": { //删除权限 "table": [ "moment", "User", "Comment" ] } }, @@ -41,7 +41,7 @@ } } ], - "tablempper": //������ӳ�� + "tablempper": //别名表映射 { "user": "apijson_user", "org": "web_organization" diff --git a/APIJSON.NET/APIJSON.NET/wwwroot/index.html b/APIJSON.NET/APIJSON.NET/wwwroot/index.html index 4c8f534..13572c2 100644 --- a/APIJSON.NET/APIJSON.NET/wwwroot/index.html +++ b/APIJSON.NET/APIJSON.NET/wwwroot/index.html @@ -35,7 +35,7 @@ - + diff --git a/APIJSON.NET/APIJSON.NET/wwwroot/js/main.js b/APIJSON.NET/APIJSON.NET/wwwroot/js/main.js index 7f32e28..6642f77 100644 --- a/APIJSON.NET/APIJSON.NET/wwwroot/js/main.js +++ b/APIJSON.NET/APIJSON.NET/wwwroot/js/main.js @@ -142,12 +142,11 @@ }, methods: { hpost: function () { - $.ajax({ url: $('#rest-url').val(), type: "POST", dataType: "json", contentType: "application/json;charset=utf-8", - data: $('#vInput').val(), + data: $('#vInput').val(),//JSON.stringify($('#vInput').val()), success: function (data) { App.jsonhtml = data; diff --git a/APIJSON.NET/APIJSONCommon/ApiJson.Common.csproj b/APIJSON.NET/APIJSONCommon/ApiJson.Common.csproj deleted file mode 100644 index cc2d355..0000000 --- a/APIJSON.NET/APIJSONCommon/ApiJson.Common.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - - netstandard2.0 - 0.0.1 - 通用查询组件 - false - - - - - - - - - - - - - diff --git a/APIJSON.NET/APIJSONCommon/ApiJson.Common_461.csproj b/APIJSON.NET/APIJSONCommon/ApiJson.Common_461.csproj deleted file mode 100644 index ef2a11b..0000000 --- a/APIJSON.NET/APIJSONCommon/ApiJson.Common_461.csproj +++ /dev/null @@ -1,97 +0,0 @@ - - - - - Debug - AnyCPU - {DC07586E-7241-4BB5-9200-CE57A81C5E27} - Library - Properties - APIJSON.NET - ApiJson.Common - v4.6.1 - 512 - true - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - packages\AspectCore.Extensions.Reflection.1.2.0\lib\net45\AspectCore.Extensions.Reflection.dll - - - - packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - packages\Microsoft.Extensions.Options.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - packages\Microsoft.Extensions.Primitives.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - packages\sqlSugar.4.9.9.10\lib\SqlSugar.dll - - - - packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/APIJSON.NET/APIJSONCommon/ApiJson.Common_461.sln b/APIJSON.NET/APIJSONCommon/ApiJson.Common_461.sln deleted file mode 100644 index 9689606..0000000 --- a/APIJSON.NET/APIJSONCommon/ApiJson.Common_461.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28803.202 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiJson.Common_461", "ApiJson.Common_461.csproj", "{DC07586E-7241-4BB5-9200-CE57A81C5E27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APIJSON.NET.Test", "..\APIJSON.NET.Test\APIJSON.NET.Test.csproj", "{3F99B6A8-3A58-4714-A0FF-186BE2874A68}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DC07586E-7241-4BB5-9200-CE57A81C5E27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC07586E-7241-4BB5-9200-CE57A81C5E27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC07586E-7241-4BB5-9200-CE57A81C5E27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC07586E-7241-4BB5-9200-CE57A81C5E27}.Release|Any CPU.Build.0 = Release|Any CPU - {3F99B6A8-3A58-4714-A0FF-186BE2874A68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F99B6A8-3A58-4714-A0FF-186BE2874A68}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F99B6A8-3A58-4714-A0FF-186BE2874A68}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F99B6A8-3A58-4714-A0FF-186BE2874A68}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {53F36702-3FD9-4AF5-A4C3-E3C30C943492} - EndGlobalSection -EndGlobal diff --git a/APIJSON.NET/APIJSONCommon/FuncList.cs b/APIJSON.NET/APIJSONCommon/FuncList.cs deleted file mode 100644 index a92f653..0000000 --- a/APIJSON.NET/APIJSONCommon/FuncList.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Linq; - -namespace APIJSON.NET -{ - /// - /// 自定义方法 - /// - public class FuncList - { - /// - /// - /// - /// - /// - /// - public string Merge(object a, object b) - { - return a.ToString() + b.ToString(); - } - - /// - /// - /// - /// - /// - /// - public object MergeObj(object a, object b) - { - return new { a, b }; - } - - /// - /// - /// - /// - /// - /// - public bool isContain(object a, object b) - { - return a.ToString().Split(',').Contains(b); - } - } -} diff --git a/APIJSON.NET/APIJSONCommon/Infrastructure/StringExtensions.cs b/APIJSON.NET/APIJSONCommon/Infrastructure/StringExtensions.cs deleted file mode 100644 index e806081..0000000 --- a/APIJSON.NET/APIJSONCommon/Infrastructure/StringExtensions.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace APIJSON.NET -{ - using System; - using System.Text.RegularExpressions; - public static class StringExtensions - { - - /// - /// 是否有值 - /// - /// - /// - public static bool IsValue(this object str) - { - return str != null && !string.IsNullOrEmpty(str.ToString()); - } - - /// - /// - /// - /// - /// - public static string GetParamName(this string param) - { - return param + new Random().Next(1, 100); - } - - } -} \ No newline at end of file diff --git a/APIJSON.NET/APIJSONCommon/Models/DbOptions.cs b/APIJSON.NET/APIJSONCommon/Models/DbOptions.cs deleted file mode 100644 index 8d4c3a3..0000000 --- a/APIJSON.NET/APIJSONCommon/Models/DbOptions.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace APIJSON.NET -{ - using SqlSugar; - public class DbOptions - { - /// - /// - /// - public DbType DbType { get; set; } - - /// - /// - /// - public string ConnectionString { get; set; } - } -} diff --git a/APIJSON.NET/APIJSONCommon/Models/RoleItem.cs b/APIJSON.NET/APIJSONCommon/Models/RoleItem.cs deleted file mode 100644 index 05a20d5..0000000 --- a/APIJSON.NET/APIJSONCommon/Models/RoleItem.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace APIJSON.NET.Models -{ - public class RoleItem - { - public string[] Table { get; set; } - public string[] Column { get; set; } - public string[] Filter { get; set; } - } - public class Role - { - public string Name { get; set; } - public RoleItem Select { get; set; } - public RoleItem Update { get; set; } - public RoleItem Insert { get; set; } - public RoleItem Delete { get; set; } - - } - -} diff --git a/APIJSON.NET/APIJSONCommon/SelectTable.cs b/APIJSON.NET/APIJSONCommon/SelectTable.cs deleted file mode 100644 index a2c402c..0000000 --- a/APIJSON.NET/APIJSONCommon/SelectTable.cs +++ /dev/null @@ -1,839 +0,0 @@ -namespace APIJSON.NET -{ - using APIJSON.NET.Services; - using AspectCore.Extensions.Reflection; - using Newtonsoft.Json.Linq; - using SqlSugar; - using System; - using System.Collections.Generic; - using System.Dynamic; - using System.Linq; - using System.Text.RegularExpressions; - - /// - /// - /// - public class SelectTable - { - private readonly IIdentityService _identitySvc; - private readonly ITableMapper _tableMapper; - private readonly SqlSugarClient db; - - /// - /// - /// - /// - /// - /// - public SelectTable(IIdentityService identityService, ITableMapper tableMapper, SqlSugarClient dbClient) - { - _identitySvc = identityService; - _tableMapper = tableMapper; - db = dbClient; - } - /// - /// 判断表名是否正确 - /// - /// - /// - public bool IsTable(string table) - { - return db.DbMaintenance.GetTableInfoList().Any(it => it.Name.Equals(table, StringComparison.CurrentCultureIgnoreCase)); - } - /// - /// 判断表的列名是否正确 - /// - /// - /// - /// - public bool IsCol(string table, string col) - { - return db.DbMaintenance.GetColumnInfosByTableName(table).Any(it => it.DbColumnName.Equals(col, StringComparison.CurrentCultureIgnoreCase)); - } - /// - /// 动态调用方法 - /// - /// - /// - /// - /// - public object ExecFunc(string funcname, object[] param, Type[] types) - { - var method = typeof(FuncList).GetMethod(funcname); - - var reflector = method.GetReflector(); - var result = reflector.Invoke(new FuncList(), param); - return result; - } - - private string ToSql(string subtable, int page, int count, int query, string json) - { - JObject values = JObject.Parse(json); - page = values["page"] == null ? page : int.Parse(values["page"].ToString()); - count = values["count"] == null ? count : int.Parse(values["count"].ToString()); - query = values["query"] == null ? query : int.Parse(values["query"].ToString()); - values.Remove("page"); - values.Remove("count"); - subtable = _tableMapper.GetTableName(subtable); - var tb = sugarQueryable(subtable, "*", values,null); - var xx= tb.Skip((page - 1) * count).Take(10).ToSql(); - return xx.Key; - } - /// - /// - /// - /// - /// - /// - /// - /// - /// - public Tuple GetTableData(string subtable, int page, int count, int query, string json, JObject dd) - { - - var role = _identitySvc.GetSelectRole(subtable); - if (!role.Item1)//没有权限返回异常 - { - throw new Exception(role.Item2); - } - string selectrole = role.Item2; - subtable = _tableMapper.GetTableName(subtable); - - JObject values = JObject.Parse(json); - page = values["page"] == null ? page : int.Parse(values["page"].ToString()); - count = values["count"] == null ? count : int.Parse(values["count"].ToString()); - query = values["query"] == null ? query : int.Parse(values["query"].ToString()); - values.Remove("page"); - values.Remove("count"); - var tb = sugarQueryable(subtable, selectrole, values, dd); - if (query == 1)//1-总数 - return new Tuple(new List(), tb.Count()); - else - { - if (count > 0) - { - int total = 0; - if (query == 0)//0-对象 - return new Tuple(tb.ToPageList(page, count), total); - else - //2-以上全部 - return new Tuple(tb.ToPageList(page, count, ref total), total); - - } - else - { - if (query == 0) - return new Tuple(tb.ToList(), 0); - else - return new Tuple(tb.ToList(), tb.Count()); - } - } - } - - /// - /// - /// - /// - /// - /// - /// - public dynamic GetFirstData(string subtable, string json, JObject dd) - { - - var role = _identitySvc.GetSelectRole(subtable); - if (!role.Item1)//没有权限返回异常 - { - throw new Exception(role.Item2); - } - string selectrole = role.Item2; - subtable = _tableMapper.GetTableName(subtable); - JObject values = JObject.Parse(json); - values.Remove("page"); - values.Remove("count"); - var tb = sugarQueryable(subtable, selectrole, values, dd).First(); - var dic = (IDictionary)tb; - foreach (var item in values.Properties().Where(it => it.Name.EndsWith("()"))) - { - if (item.Value.IsValue()) - { - string func = item.Value.ToString().Substring(0, item.Value.ToString().IndexOf("(")); - string param = item.Value.ToString().Substring(item.Value.ToString().IndexOf("(") + 1).TrimEnd(')'); - var types = new List(); - var paramss = new List(); - foreach (var va in param.Split(',')) - { - types.Add(typeof(object)); - paramss.Add(tb.Where(it => it.Key.Equals(va)).Select(i => i.Value)); - } - dic[item.Name] = ExecFunc(func, paramss.ToArray(), types.ToArray()); - } - } - - return tb; - - } - - /// - /// 解析并查询 - /// - /// - /// - public JObject Query(string queryJson) - { - JObject resultObj = new JObject(); - - try - { - JObject queryJobj = JObject.Parse(queryJson); - resultObj = Query(queryJobj); - } - catch (Exception ex) - { - resultObj.Add("code", "500"); - resultObj.Add("msg", ex.Message); - } - - return resultObj; - } - - /// - /// 单表查询 - /// - /// - /// 返回数据的节点名称 默认为 infos - /// - public JObject QuerySingle(JObject queryObj, string nodeName = "infos") - { - JObject resultObj = new JObject(); - resultObj.Add("code", "200"); - resultObj.Add("msg", "success"); - try - { - int total = 0; - foreach (var item in queryObj) - { - string key = item.Key.Trim(); - - if (key.EndsWith("[]")) - { - total = QuerySingleList(resultObj, item, nodeName); - } - else if (key.Equals("func")) - { - ExecFunc(resultObj, item); - } - else if (key.Equals("total@")) - { - resultObj.Add("total", total); - } - } - } - catch (Exception ex) - { - resultObj["code"] = "500"; - resultObj["msg"] = ex.Message; - } - return resultObj; - } - - /// - /// 获取查询语句 - /// - /// - /// - public string ToSql(JObject queryObj) - { - foreach (var item in queryObj) - { - string key = item.Key.Trim(); - - if (key.EndsWith("[]")) - { - return ToSql(item); - } - } - return string.Empty; - } - - /// - /// 解析并查询 - /// - /// - /// - public JObject Query(JObject queryObj) - { - JObject resultObj = new JObject(); - resultObj.Add("code", "200"); - resultObj.Add("msg", "success"); - try - { - int total = 0; - foreach (var item in queryObj) - { - string key = item.Key.Trim(); - - if (key.Equals("[]")) - { - total = QueryMoreList(resultObj, item); - } - else if (key.EndsWith("[]")) - { - total = QuerySingleList(resultObj, item); - } - else if (key.Equals("func")) - { - ExecFunc(resultObj, item); - } - else if (key.Equals("total@")) - { - resultObj.Add("total", total); - } - else - { - var template = GetFirstData(key, item.Value.ToString(), resultObj); - if (template != null) - { - resultObj.Add(key, JToken.FromObject(template)); - } - } - } - } - catch (Exception ex) - { - resultObj["code"] = "500"; - resultObj["msg"] = ex.Message; - } - return resultObj; - } - - //单表查询,返回的数据在指定的NodeName节点 - private int QuerySingleList(JObject resultObj, KeyValuePair item, string nodeName) - { - string key = item.Key.Trim(); - var jb = JObject.Parse(item.Value.ToString()); - int page = jb["page"] == null ? 0 : int.Parse(jb["page"].ToString()); - int count = jb["count"] == null ? 10 : int.Parse(jb["count"].ToString()); - int query = jb["query"] == null ? 0 : int.Parse(jb["query"].ToString()); - int total = 0; - - jb.Remove("page"); jb.Remove("count"); jb.Remove("query"); - - var htt = new JArray(); - foreach (var t in jb) - { - var datas = GetTableData(t.Key, page, count, query, t.Value.ToString(), null); - if (query > 0) - { - total = datas.Item2; - } - foreach (var data in datas.Item1) - { - htt.Add(JToken.FromObject(data)); - } - } - - if (!string.IsNullOrEmpty(nodeName)) - { - resultObj.Add(nodeName, htt); - } - else - resultObj.Add(key, htt); - return total; - } - - private string ToSql(KeyValuePair item) - { - string key = item.Key.Trim(); - var jb = JObject.Parse(item.Value.ToString()); - int page = jb["page"] == null ? 0 : int.Parse(jb["page"].ToString()); - int count = jb["count"] == null ? 10 : int.Parse(jb["count"].ToString()); - int query = jb["query"] == null ? 0 : int.Parse(jb["query"].ToString()); - - jb.Remove("page"); jb.Remove("count"); jb.Remove("query"); - var htt = new JArray(); - foreach (var t in jb) - { - return ToSql(t.Key, page, count, query, t.Value.ToString()); - } - - return string.Empty; - } - //单表查询 - private int QuerySingleList(JObject resultObj, KeyValuePair item) - { - string key = item.Key.Trim(); - return QuerySingleList(resultObj, item, key); - } - - //多列表查询 - private int QueryMoreList(JObject resultObj, KeyValuePair item) - { - int total = 0; - - var jb = JObject.Parse(item.Value.ToString()); - var page = jb["page"] == null ? 0 : int.Parse(jb["page"].ToString()); - var count = jb["count"] == null ? 10 : int.Parse(jb["count"].ToString()); - var query = jb["query"] == null ? 0 : int.Parse(jb["query"].ToString()); - jb.Remove("page"); jb.Remove("count"); jb.Remove("query"); - var htt = new JArray(); - List tables = new List(), where = new List(); - foreach (var t in jb) - { - tables.Add(t.Key); where.Add(t.Value.ToString()); - } - if (tables.Count > 0) - { - string table = tables[0]; - var temp = GetTableData(table, page, count, query, where[0], null); - if (query > 0) - { - total = temp.Item2; - } - - foreach (var dd in temp.Item1) - { - var zht = new JObject(); - zht.Add(table, JToken.FromObject(dd)); - for (int i = 1; i < tables.Count; i++) - { - string subtable = tables[i]; - if (subtable.EndsWith("[]")) - { - subtable = subtable.TrimEnd("[]".ToCharArray()); - var jbb = JObject.Parse(where[i]); - page = jbb["page"] == null ? 0 : int.Parse(jbb["page"].ToString()); - count = jbb["count"] == null ? 0 : int.Parse(jbb["count"].ToString()); - - var lt = new JArray(); - foreach (var d in GetTableData(subtable, page, count, query, jbb[subtable].ToString(), zht).Item1) - { - lt.Add(JToken.FromObject(d)); - } - zht.Add(tables[i], lt); - } - else - { - var ddf = GetFirstData(subtable, where[i].ToString(), zht); - if (ddf != null) - { - zht.Add(subtable, JToken.FromObject(ddf)); - - } - } - } - htt.Add(zht); - } - - } - if (query != 1) - { - resultObj.Add("[]", htt); - } - - return total; - } - - private void ExecFunc(JObject resultObj, KeyValuePair item) - { - JObject jb = JObject.Parse(item.Value.ToString()); - Type type = typeof(FuncList); - - var dataJObj = new JObject(); - foreach (var f in jb) - { - var types = new List(); - var param = new List(); - foreach (var va in JArray.Parse(f.Value.ToString())) - { - types.Add(typeof(object)); - param.Add(va); - } - dataJObj.Add(f.Key, JToken.FromObject(ExecFunc(f.Key, param.ToArray(), types.ToArray()))); - } - resultObj.Add("func", dataJObj); - } - - private ISugarQueryable sugarQueryable(string subtable, string selectrole, JObject values, JObject dd) - { - if (!IsTable(subtable)) - { - throw new Exception($"表名{subtable}不正确!"); - } - var tb = db.Queryable(subtable, "tb"); - - - if (values["@column"].IsValue()) - { - ProcessColumn(subtable, selectrole, values, tb); - } - else - { - tb.Select(selectrole); - } - - List conModels = new List(); - if (values["identity"].IsValue()) - { - conModels.Add(new ConditionalModel() { FieldName = values["identity"].ToString(), ConditionalType = ConditionalType.Equal, FieldValue = _identitySvc.GetUserIdentity() }); - } - foreach (var va in values) - { - string vakey = va.Key.Trim(); - string fieldValue = va.Value.ToString(); - - if (vakey.EndsWith("$"))//模糊查询 - { - FuzzyQuery(subtable, conModels, va); - } - else if (vakey.EndsWith("{}"))//逻辑运算 - { - ConditionQuery(subtable, conModels, va); - } - else if (vakey.EndsWith("%"))//bwtween查询 - { - ConditionBetween(subtable, conModels, va); - } - else if (vakey.EndsWith("@") && dd != null) // 关联上一个table - { - string[] str = fieldValue.Split('/'); - string value = string.Empty; - if (str.Length == 3) - { - value = dd[str[1]][str[2]].ToString(); - } - else if (str.Length == 2) - { - value = dd[str[0]][str[1]].ToString(); - } - - conModels.Add(new ConditionalModel() { FieldName = vakey.TrimEnd('@'), ConditionalType = ConditionalType.Equal, FieldValue = value }); - - } - else if (IsCol(subtable, vakey)) //其他where条件 - { - conModels.Add(new ConditionalModel() { FieldName = vakey, ConditionalType = ConditionalType.Equal, FieldValue = fieldValue }); - } - } - tb.Where(conModels); - - //排序 - ProcessOrder(subtable, values, tb); - - //分组 - PrccessGroup(subtable, values, tb); - - //Having - ProcessHaving(values, tb); - return tb; - } - - //处理字段重命名 "@column":"toId:parentId",对应SQL是toId AS parentId,将查询的字段toId变为parentId返回 - private void ProcessColumn(string subtable, string selectrole, JObject values, ISugarQueryable tb) - { - var str = new System.Text.StringBuilder(100); - foreach (var item in values["@column"].ToString().Split(',')) - { - string[] ziduan = item.Split(':'); - string colName = ziduan[0]; - var ma = new Regex(@"\((\w+)\)").Match(colName); - //处理max,min这样的函数 - if (ma.Success && ma.Groups.Count > 1) - { - colName = ma.Groups[1].Value; - } - - //判断列表是否有权限 sum(1),sum(*),Count(1)这样的值直接有效 - if (colName == "*" || int.TryParse(colName, out int colNumber) || (IsCol(subtable, colName) && _identitySvc.ColIsRole(colName, selectrole.Split(',')))) - { - if (ziduan.Length > 1) - { - if (ziduan[1].Length > 20) - { - throw new Exception("别名不能超过20个字符"); - } - str.Append(ziduan[0] + " as " + ReplaceSQLChar(ziduan[1]) + ","); - } - else - str.Append(ziduan[0] + ","); - - } - } - if (string.IsNullOrEmpty(str.ToString())) - { - throw new Exception($"表名{subtable}没有可查询的字段!"); - } - tb.Select(str.ToString().TrimEnd(',')); - } - - // "@having":"function0(...)?value0;function1(...)?value1;function2(...)?value2...", - // SQL函数条件,一般和 @group一起用,函数一般在 @column里声明 - private void ProcessHaving(JObject values, ISugarQueryable tb) - { - if (values["@having"].IsValue()) - { - List hw = new List(); - List havingItems = new List(); - if (values["@having"].HasValues) - { - havingItems = values["@having"].Select(p => p.ToString()).ToList(); - } - else - { - havingItems.Add(values["@having"].ToString()); - } - foreach (var item in havingItems) - { - string and = item.ToString(); - var model = new ConditionalModel(); - if (and.Contains(">=")) - { - model.FieldName = and.Split(new string[] { ">=" }, StringSplitOptions.RemoveEmptyEntries)[0]; - model.ConditionalType = ConditionalType.GreaterThanOrEqual; - model.FieldValue = and.Split(new string[] { ">=" }, StringSplitOptions.RemoveEmptyEntries)[1]; - } - else if (and.Contains("<=")) - { - - model.FieldName = and.Split(new string[] { "<=" }, StringSplitOptions.RemoveEmptyEntries)[0]; - model.ConditionalType = ConditionalType.LessThanOrEqual; - model.FieldValue = and.Split(new string[] { "<=" }, StringSplitOptions.RemoveEmptyEntries)[1]; - } - else if (and.Contains(">")) - { - model.FieldName = and.Split(new string[] { ">" }, StringSplitOptions.RemoveEmptyEntries)[0]; - model.ConditionalType = ConditionalType.GreaterThan; - model.FieldValue = and.Split(new string[] { ">" }, StringSplitOptions.RemoveEmptyEntries)[1]; - } - else if (and.Contains("<")) - { - model.FieldName = and.Split(new string[] { "<" }, StringSplitOptions.RemoveEmptyEntries)[0]; - model.ConditionalType = ConditionalType.LessThan; - model.FieldValue = and.Split(new string[] { "<" }, StringSplitOptions.RemoveEmptyEntries)[1]; - } - else if (and.Contains("!=")) - { - model.FieldName = and.Split(new string[] { "!=" }, StringSplitOptions.RemoveEmptyEntries)[0]; - model.ConditionalType = ConditionalType.NoEqual; - model.FieldValue = and.Split(new string[] { "!=" }, StringSplitOptions.RemoveEmptyEntries)[1]; - } - else if (and.Contains("=")) - { - model.FieldName = and.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries)[0]; - model.ConditionalType = ConditionalType.Equal; - model.FieldValue = and.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries)[1]; - } - hw.Add(model); - } - - - tb.Having(string.Join(",", havingItems)); - } - } - - //"@group":"column0,column1...",分组方式。如果 @column里声明了Table的id,则id也必须在 @group中声明;其它情况下必须满足至少一个条件: - //1.分组的key在 @column里声明 - //2.Table主键在 @group中声明 - private void PrccessGroup(string subtable, JObject values, ISugarQueryable tb) - { - if (values["@group"].IsValue()) - { - var str = new System.Text.StringBuilder(100); - foreach (var and in values["@group"].ToString().Split(',')) - { - if (IsCol(subtable, and)) - { - str.Append(and + ","); - } - } - tb.GroupBy(str.ToString().TrimEnd(',')); - } - } - - //处理排序 "@order":"name-,id"查询按 name降序、id默认顺序 排序的User数组 - private void ProcessOrder(string subtable, JObject values, ISugarQueryable tb) - { - if (values["@order"].IsValue()) - { - foreach (var item in values["@order"].ToString().Split(',')) - { - string col = item.Replace("-", "").Replace("+", ""); - if (IsCol(subtable, col)) - { - if (item.EndsWith("-")) - { - tb.OrderBy($"{col} desc"); - } - else if (item.EndsWith("+")) - { - tb.OrderBy($"{col} asc"); - } - else - { - tb.OrderBy($"{col}"); - } - } - } - } - } - - //条件查询 "key{}":"条件0,条件1...",条件为任意SQL比较表达式字符串,非Number类型必须用''包含条件的值,如'a' - //&, |, ! 逻辑运算符,对应数据库 SQL 中的 AND, OR, NOT。 - // 横或纵与:同一字段的值内条件默认 | 或连接,不同字段的条件默认 & 与连接。 - // ① & 可用于"key&{}":"条件"等 - // ② | 可用于"key|{}":"条件", "key|{}":[] 等,一般可省略 - // ③ ! 可单独使用,如"key!":Object,也可像&,|一样配合其他功能符使用 - private void ConditionQuery(string subtable, List conModels, KeyValuePair va) - { - string vakey = va.Key.Trim(); - string field = vakey.TrimEnd("{}".ToCharArray()); - if (va.Value.HasValues) - { - List inValues = new List(); - foreach (var cm in va.Value) - { - inValues.Add(cm.ToString()); - } - - conModels.Add(new ConditionalModel() { FieldName = field, ConditionalType = field.EndsWith("!") ? ConditionalType.NotIn : ConditionalType.In, FieldValue = string.Join(",", inValues) }); - - } - else - { - var ddt = new List>(); - foreach (var and in va.Value.ToString().Split(',')) - { - var model = new ConditionalModel(); - model.FieldName = field.TrimEnd("&".ToCharArray());//处理&()的查询方式 - if (and.StartsWith(">=")) - { - model.ConditionalType = ConditionalType.GreaterThanOrEqual; - model.FieldValue = and.TrimStart(">=".ToCharArray()); - } - else if (and.StartsWith("<=")) - { - - model.ConditionalType = ConditionalType.LessThanOrEqual; - model.FieldValue = and.TrimStart("<=".ToCharArray()); - } - else if (and.StartsWith(">")) - { - model.ConditionalType = ConditionalType.GreaterThan; - model.FieldValue = and.TrimStart('>'); - } - else if (and.StartsWith("<")) - { - model.ConditionalType = ConditionalType.LessThan; - model.FieldValue = and.TrimStart('<'); - } - ddt.Add(new KeyValuePair((field.EndsWith("&") ? WhereType.And : WhereType.Or), model)); - } - conModels.Add(new ConditionalCollections() { ConditionalList = ddt }); - } - } - - //"key%":"start,end" => "key%":["start,end"],其中 start 和 end 都只能为 Boolean, Number, String 中的一种,如 "2017-01-01,2019-01-01" ,["1,90000", "82001,100000"] ,可用于连续范围内的筛选 - private void ConditionBetween(string subtable, List conModels, KeyValuePair va) - { - string vakey = va.Key.Trim(); - string field = vakey.TrimEnd("%".ToCharArray()); - List inValues = new List(); - - if (va.Value.HasValues) - { - foreach (var cm in va.Value) - { - inValues.Add(cm.ToString()); - } - } - else - { - inValues.Add(va.Value.ToString()); - } - for (var i = 0; i < inValues.Count; i++) - { - var fileds = inValues[i].Split(','); - if (fileds.Length == 2) - { - var ddt = new List>(); - - var leftCondition = new ConditionalModel() - { - FieldName = field, - ConditionalType = ConditionalType.GreaterThanOrEqual, - FieldValue = fileds[0] - }; - ddt.Add(new KeyValuePair(i == 0 ? WhereType.And : WhereType.Or, leftCondition)); - var rightCondition = new ConditionalModel() - { - FieldName = field, - ConditionalType = ConditionalType.LessThanOrEqual, - FieldValue = fileds[1] - }; - ddt.Add(new KeyValuePair(WhereType.And, rightCondition)); - - conModels.Add(new ConditionalCollections() { ConditionalList = ddt }); - } - } - } - - //模糊搜索 "key$":"SQL搜索表达式" => "key$":["SQL搜索表达式"],任意SQL搜索表达式字符串,如 %key%(包含key), key%(以key开始), %k%e%y%(包含字母k,e,y) 等,%表示任意字符 - private void FuzzyQuery(string subtable, List conModels, KeyValuePair va) - { - string vakey = va.Key.Trim(); - string fieldValue = va.Value.ToString(); - var conditionalType = ConditionalType.Like; - if (IsCol(subtable, vakey.TrimEnd('$'))) - { - //支持三种like查询 - if (fieldValue.StartsWith("%") && fieldValue.EndsWith("%")) - { - conditionalType = ConditionalType.Like; - } - else if (fieldValue.StartsWith("%")) - { - conditionalType = ConditionalType.LikeRight; - } - else if (fieldValue.EndsWith("%")) - { - conditionalType = ConditionalType.LikeLeft; - } - conModels.Add(new ConditionalModel() { FieldName = vakey.TrimEnd('$'), ConditionalType = conditionalType, FieldValue = fieldValue.TrimEnd("%".ToArray()).TrimStart("%".ToArray()) }); - } - } - - public string ReplaceSQLChar(string str) - { - if (str == String.Empty) - return String.Empty; - str = str.Replace("'", ""); - str = str.Replace(";", ""); - str = str.Replace(",", ""); - str = str.Replace("?", ""); - str = str.Replace("<", ""); - str = str.Replace(">", ""); - str = str.Replace("(", ""); - str = str.Replace(")", ""); - str = str.Replace("@", ""); - str = str.Replace("=", ""); - str = str.Replace("+", ""); - str = str.Replace("*", ""); - str = str.Replace("&", ""); - str = str.Replace("#", ""); - str = str.Replace("%", ""); - str = str.Replace("$", ""); - str = str.Replace("\"", ""); - - //删除与数据库相关的词 - str = Regex.Replace(str, "delete from", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "drop table", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "xp_cmdshell", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "exec master", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "net localgroup administrators", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "net user", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "-", "", RegexOptions.IgnoreCase); - str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase); - return str; - } - } -} diff --git a/APIJSON.NET/APIJSONCommon/Services/IIdentityService.cs b/APIJSON.NET/APIJSONCommon/Services/IIdentityService.cs deleted file mode 100644 index db6c8ce..0000000 --- a/APIJSON.NET/APIJSONCommon/Services/IIdentityService.cs +++ /dev/null @@ -1,33 +0,0 @@ -using APIJSON.NET.Models; -using System; - -namespace APIJSON.NET.Services -{ - public interface IIdentityService - { - /// - /// 获取当前用户id - /// - /// - string GetUserIdentity(); - /// - /// 获取当前用户权限组名称 - /// - /// - string GetUserRoleName(); - /// - /// 获取当前用户权限 - /// - /// - Role GetRole(); - /// - /// 获取当前表的可查询字段 - /// - /// - /// - (bool, string) GetSelectRole(string table); - - - bool ColIsRole(string col, string[] selectrole); - } -} diff --git a/APIJSON.NET/APIJSONCommon/Services/TableMapper.cs b/APIJSON.NET/APIJSONCommon/Services/TableMapper.cs deleted file mode 100644 index d236cd5..0000000 --- a/APIJSON.NET/APIJSONCommon/Services/TableMapper.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; - -namespace APIJSON.NET.Services -{ - public class TableMapper : ITableMapper - { - private readonly Dictionary _options= new Dictionary(StringComparer.OrdinalIgnoreCase); - public TableMapper(IOptions> options) - { - foreach (var item in options.Value) - { - _options.Add(item.Key, item.Value); - } - } - public string GetTableName(string oldname) - { - if (_options.ContainsKey(oldname)) - { - return _options[oldname]; - } - return oldname; - } - } -} diff --git a/APIJSON.NET/APIJSONCommon/app.config b/APIJSON.NET/APIJSONCommon/app.config deleted file mode 100644 index 2bbe771..0000000 --- a/APIJSON.NET/APIJSONCommon/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/APIJSON.NET/APIJSONCommon/packages.config b/APIJSON.NET/APIJSONCommon/packages.config deleted file mode 100644 index deca899..0000000 --- a/APIJSON.NET/APIJSONCommon/packages.config +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file