|
@@ -1,4 +1,5 @@
|
|
|
-using Microsoft.AspNetCore.Http;
|
|
|
+using Azure.Cosmos;
|
|
|
+using Microsoft.AspNetCore.Http;
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
using Microsoft.Extensions.Options;
|
|
@@ -12,6 +13,7 @@ using TEAMModelOS.SDK.Context.Constant;
|
|
|
using TEAMModelOS.SDK.DI;
|
|
|
using TEAMModelOS.SDK.Extension;
|
|
|
using TEAMModelOS.SDK.Models;
|
|
|
+using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal;
|
|
|
using TEAMModelOS.SDK.Models.Table;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers
|
|
@@ -40,144 +42,117 @@ namespace TEAMModelOS.Controllers
|
|
|
_coreAPIHttpService = coreAPIHttpService;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
|
- /// 开放平台用户登录
|
|
|
+ /// 登录 第三方用户数据在CosmosDB
|
|
|
/// </summary>
|
|
|
/// <param name="jsonElement"></param>
|
|
|
/// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
- [HttpPost("get-bizuserlogin")]
|
|
|
- public async Task<IActionResult> GetCommpanyLogin(JsonElement jsonElement)
|
|
|
+ [HttpPost("get-loginuser")]
|
|
|
+ public async Task<IActionResult> GetBizUserLogin(JsonElement jsonElement)
|
|
|
{
|
|
|
jsonElement.TryGetProperty("mobile", out JsonElement mobile);
|
|
|
- jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
|
|
|
jsonElement.TryGetProperty("mail", out JsonElement mail);
|
|
|
if (!jsonElement.TryGetProperty("pwd", out JsonElement password)) return BadRequest();
|
|
|
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
|
|
|
- Dictionary<string, object> tableDic = new();
|
|
|
- string tableSql = null;
|
|
|
- if (!string.IsNullOrEmpty($"{mail}"))
|
|
|
- {
|
|
|
- tableSql = $" PartitionKey eq 'BusinessUser' and mail eq '{mail}'";
|
|
|
- //tableDic = new Dictionary<string, object>() { { "PartitionKey", "BizRelUser" }, { "mail", $"{mail}" } };
|
|
|
- }
|
|
|
- if (!string.IsNullOrEmpty($"{tmdId}"))
|
|
|
- {
|
|
|
- tableSql = $" PartitionKey eq 'BusinessUser' and tmdId eq '{tmdId}'";
|
|
|
- //tableDic = new Dictionary<string, object>() { { "PartitionKey", "BizRelUser" }, { "tmdId", $"{tmdId}" } };
|
|
|
- }
|
|
|
+
|
|
|
+ string loginSql = null;
|
|
|
if (!string.IsNullOrEmpty($"{mobile}"))
|
|
|
+ loginSql = $"select value(c) from c where c.mobile ={mobile}";
|
|
|
+ else if (!string.IsNullOrEmpty($"{mail}"))
|
|
|
+ loginSql = $"select value(c) from c where c.mail ={mail}";
|
|
|
+ else return Ok(new { state = RespondCode.ParamsError, msg = "手机号/和邮箱为空" });
|
|
|
+
|
|
|
+ List<BusinessUsers> bizUsers = new();
|
|
|
+ await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Normal").GetItemQueryIterator<BusinessUsers>(queryText: loginSql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("BizUsers") }))
|
|
|
{
|
|
|
- tableSql = $" PartitionKey eq 'BusinessUser' and mobile eq '{mobile}'";
|
|
|
- //tableDic = new Dictionary<string, object>() { { "PartitionKey", "BizRelUser" }, { "mobile", $"{mobile}" } };
|
|
|
+ bizUsers.Add(item);
|
|
|
}
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(tableSql))
|
|
|
+ BusinessUsers businessUsers = new(); string openid_token = null;
|
|
|
+ if (bizUsers.Count > 0)
|
|
|
{
|
|
|
- var table = tableClient.GetTableReference("IESOpenApi");
|
|
|
- List<BusinessUser> findBizUsers = await table.QueryWhereString<BusinessUser>(tableSql);
|
|
|
- //List<BusinessUser> findBizUsers = await table.FindListByDict<BusinessUser>(tableDic);
|
|
|
- if (findBizUsers.Count > 0)
|
|
|
+ foreach (var item in bizUsers)
|
|
|
{
|
|
|
- BusinessUser bizUser = new();
|
|
|
- foreach (var item in findBizUsers)
|
|
|
+ var hashedPw = Utils.HashedPassword(password.ToString(), item.salt.ToString());
|
|
|
+ if (hashedPw.Equals(item.pwd))
|
|
|
{
|
|
|
- bizUser.PartitionKey = item.PartitionKey;
|
|
|
- bizUser.RowKey = item.RowKey;
|
|
|
- bizUser.name = item.name;
|
|
|
- bizUser.picture = item.picture;
|
|
|
- bizUser.tmdId = item.tmdId;
|
|
|
- bizUser.mobile = item.mobile;
|
|
|
- bizUser.mail = item.mail;
|
|
|
- bizUser.salt = item.salt;
|
|
|
- bizUser.pwd = item.pwd;
|
|
|
- }
|
|
|
- List<BizRelUser> bizRelUsers = new();
|
|
|
-
|
|
|
- List<RelBizInfo> relBizInfos = new();
|
|
|
- if (bizUser != null)
|
|
|
- {
|
|
|
- string tableSqlUser = $"PartitionKey eq 'BizRelUser' and userId eq '{bizUser.RowKey}'";
|
|
|
- bizRelUsers = await table.QueryWhereString<BizRelUser>(tableSqlUser);
|
|
|
- if (bizRelUsers.Count > 0)
|
|
|
- {
|
|
|
- foreach (var item in bizRelUsers)
|
|
|
- {
|
|
|
- BusinessConfig businessConfig = table.Get<BusinessConfig>("BusinessConfig", item.bizId);
|
|
|
- RelBizInfo relBizInfo = new()
|
|
|
- {
|
|
|
- userRowKey = item.userId,
|
|
|
- relId = item.RowKey,
|
|
|
- bizRowKey = item.bizId,
|
|
|
- roles = !string.IsNullOrEmpty($"{item.roles}") ? new List<string>(item.roles.Split(',')) : new List<string>()
|
|
|
- };
|
|
|
- if (businessConfig != null)
|
|
|
- {
|
|
|
- relBizInfo.bizName = businessConfig.name;
|
|
|
- relBizInfo.bizCredit = businessConfig.credit;
|
|
|
- relBizInfo.bizPicture = businessConfig.picture;
|
|
|
- relBizInfos.Add(relBizInfo);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- var hashedPw = Utils.HashedPassword(password.ToString(), bizUser.salt.ToString());
|
|
|
- if (hashedPw.Equals(bizUser.pwd))
|
|
|
- {
|
|
|
- string openid_token = JwtAuthExtension.CreateBizLoginAuthToken(_option.HostName, bizUser.RowKey?.ToString(), bizUser.name?.ToString(), bizUser.picture?.ToString(), $"{_option.Location}-Open", _option.JwtSecretKey, expire: 3);
|
|
|
+ businessUsers = item;
|
|
|
+ //string id_token = JwtAuth.CreateAuthTokenBI(_option.HostName, bizUser.RowKey?.ToString(), bizUser.name?.ToString(), bizUser.picture?.ToString(), _option.JwtSecretKey, scope: "company", webSite: Website, expire: 3);
|
|
|
+ openid_token = JwtAuthExtension.CreateBizLoginAuthToken(_option.HostName, businessUsers.id?.ToString(), businessUsers.name?.ToString(), businessUsers.picture?.ToString(), $"{_option.Location}-Open", _option.JwtSecretKey, expire: 3);
|
|
|
|
|
|
- await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "tabledd-update", $"{bizUser.name}【{bizUser.RowKey}】登录商务智能开放平台", _dingDing, tid: bizUser.RowKey, tname: bizUser.name, twebsite: _option.Location, httpContext: HttpContext);
|
|
|
- return Ok(new { state = RespondCode.Ok, openid_token, bizUser, relBizInfos });
|
|
|
- }
|
|
|
- else return Ok(new { state = RespondCode.ForbiddenPwd, msg = "密码错误!" });
|
|
|
+ await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "tabledd-update", $"{businessUsers.name}【{businessUsers.id}】登录开放平台", _dingDing, tid: businessUsers.id, tname: businessUsers.name, twebsite: "Open", httpContext: HttpContext);
|
|
|
+ };
|
|
|
}
|
|
|
- else return Ok(new { state = RespondCode.NotFound, msg = "该账户不存在" });
|
|
|
}
|
|
|
- else return Ok(new { state = RespondCode.ParamsError, msg = "参数错误" });
|
|
|
- }
|
|
|
+ else return Ok(new { state = RespondCode.NotFound, msg = "未找到该用户!" });
|
|
|
|
|
|
+ if (businessUsers.id != null)
|
|
|
+ return Ok(new { state = RespondCode.Ok, openid_token, businessUsers });
|
|
|
+ else
|
|
|
+ return Ok(new { state = RespondCode.ForbiddenPwd, msg = "密码错误" });
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 注册开放平台用户
|
|
|
+ /// 注册 第三方用户数据在CosmosDB
|
|
|
/// </summary>
|
|
|
/// <param name="jsonElement"></param>
|
|
|
/// <returns></returns>
|
|
|
- [HttpPost("set-ropen")]
|
|
|
- public async Task<IActionResult> SetRegistered(JsonElement jsonElement)
|
|
|
+ [HttpPost("set-bizuser")]
|
|
|
+ public async Task<IActionResult> SetBizUserLogin(JsonElement jsonElement)
|
|
|
{
|
|
|
- if (!jsonElement.TryGetProperty("name", out JsonElement name)) return BadRequest();
|
|
|
+ jsonElement.TryGetProperty("name", out JsonElement name);
|
|
|
if (!jsonElement.TryGetProperty("mobile", out JsonElement mobile)) return BadRequest();
|
|
|
- jsonElement.TryGetProperty("tmdId", out JsonElement tmdId);
|
|
|
jsonElement.TryGetProperty("mail", out JsonElement mail);
|
|
|
jsonElement.TryGetProperty("pwd", out JsonElement pwd);
|
|
|
|
|
|
- string Website = "China";
|
|
|
+ long set1 = mobile.GetInt64();
|
|
|
+
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
|
|
|
|
|
|
- var table = tableClient.GetTableReference("IESOpenApi");
|
|
|
+ string loginSql = null;
|
|
|
+ if (!string.IsNullOrEmpty($"{mobile}"))
|
|
|
+ loginSql = $"select value(c) from c where c.mobile ={mobile}";
|
|
|
+ else if (!string.IsNullOrEmpty($"{mail}"))
|
|
|
+ loginSql = $"select value(c) from c where c.mail ={mail}";
|
|
|
+ else return Ok(new { state = RespondCode.ParamsError, msg = "手机号/和邮箱为空" });
|
|
|
|
|
|
- string salt = Utils.CreatSaltString(8);
|
|
|
+ List<BizUsers> tempBizUsers = new();
|
|
|
+ await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Normal").GetItemQueryIterator<BizUsers>(queryText: loginSql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("BizUsers") }))
|
|
|
+ {
|
|
|
+ tempBizUsers.Add(item);
|
|
|
+ }
|
|
|
|
|
|
- BusinessUser bizUser = null;
|
|
|
- List<BusinessUser> findBizUsers = await table.QueryWhereString<BusinessUser>($" PartitionKey eq 'BusinessUser' and mobile eq '{mobile}'");
|
|
|
- if (findBizUsers.Count <= 0)
|
|
|
+ if (tempBizUsers.Count > 0)
|
|
|
+ return Ok(new { state = RespondCode.Conflict, msg = "已存在" });
|
|
|
+ else
|
|
|
{
|
|
|
- var coreUser = await _coreAPIHttpService.GetUserInfo(new Dictionary<string, string> { { "key", $"{mobile}" } }, _option.Location, _configuration);
|
|
|
+ string salt = Utils.CreatSaltString(8);
|
|
|
+ BizUsers bizUsers = new()
|
|
|
+ {
|
|
|
+ id = Guid.NewGuid().ToString(),
|
|
|
+ code = "BizUsers",
|
|
|
+ name = string.IsNullOrEmpty($"{name}") ? $"{mobile}" : $"{name}",
|
|
|
+ mobile = mobile.GetInt64(),
|
|
|
+ salt = salt,
|
|
|
+ pwd = string.IsNullOrEmpty($"{pwd}") ? Utils.HashedPassword($"{mobile}", salt) : Utils.HashedPassword($"{pwd}", salt),
|
|
|
+ };
|
|
|
|
|
|
- if (coreUser != null)
|
|
|
- bizUser = new() { RowKey = Guid.NewGuid().ToString(), name = coreUser.name, tmdId = coreUser.id, mobile = coreUser.mobile, mail = coreUser.mail, salt = salt, pwd = string.IsNullOrEmpty($"{pwd}") ? Utils.HashedPassword($"{mobile}", salt) : Utils.HashedPassword($"{pwd}", salt) };
|
|
|
- else
|
|
|
- bizUser = new() { RowKey = Guid.NewGuid().ToString(), name = $"{name}", mobile = $"{mobile}", salt = salt, pwd = string.IsNullOrEmpty($"{pwd}") ? Utils.HashedPassword($"{mobile}", salt) : Utils.HashedPassword($"{pwd}", salt) };
|
|
|
+ bizUsers = await cosmosClient.GetContainer("TEAMModelOS", "Normal").CreateItemAsync<BizUsers>(bizUsers, new PartitionKey("BizUsers"));
|
|
|
+ string log = $"{bizUsers.name}【{bizUsers.id}】注册第三方用户信息基础信息。";
|
|
|
|
|
|
- bizUser = await table.Save<BusinessUser>(bizUser);
|
|
|
+ //保存操作记录
|
|
|
+ await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "login-login", log, _dingDing, httpContext: HttpContext);
|
|
|
|
|
|
- await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "bizUser-update", $"{bizUser.name}【{bizUser.RowKey}】注册开放平台用户", _dingDing, tid: bizUser.RowKey, tname: bizUser.name, twebsite: Website?.ToString(), httpContext: HttpContext);
|
|
|
- return Ok(new { state = RespondCode.Ok, bizUser });
|
|
|
+ var openid_token = JwtAuthExtension.CreateBizLoginAuthToken(_option.HostName, bizUsers.id?.ToString(), bizUsers.name?.ToString(), bizUsers.picture?.ToString(), $"{_option.Location}-Open", _option.JwtSecretKey, expire: 3);
|
|
|
+
|
|
|
+ return Ok(new { state = RespondCode.Ok, openid_token, bizUsers });
|
|
|
}
|
|
|
- else return Ok(new { state = RespondCode.Conflict, msg = "该手机号已注册开放平台,请直接登录" });
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -191,7 +166,7 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if(!jsonElenent.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
+ if (!jsonElenent.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
|
|
@@ -202,9 +177,16 @@ namespace TEAMModelOS.Controllers
|
|
|
keyValue.Add("RowKey", $"{id}");
|
|
|
}
|
|
|
|
|
|
- List<BusinessConfig> companys = table.FindListByDictSync<BusinessConfig>(keyValue);
|
|
|
+ Business business = new();
|
|
|
+ var response = await cosmosClient.GetContainer("TEAMModelOS", "Normal").ReadItemStreamAsync($"{id}", new PartitionKey("BizConfig"));
|
|
|
+ if (response.Status == RespondCode.Ok)
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ business = json.ToObject<Business>();
|
|
|
+ }
|
|
|
+ else return Ok(new { state = RespondCode.NotFound, msg = "该企业信息" });
|
|
|
|
|
|
- return Ok(new { state = RespondCode.Ok, companys });
|
|
|
+ return Ok(new { state = RespondCode.Ok, business });
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
@@ -213,74 +195,77 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
- /// 重新秘钥token
|
|
|
+ /// 重置秘钥
|
|
|
/// </summary>
|
|
|
/// <param name="jsonElement"></param>
|
|
|
/// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
- [HttpPost("reset-bus")]
|
|
|
- public async Task<IActionResult> ResetBus(JsonElement jsonElement)
|
|
|
+ [HttpPost("reset-secretkey")]
|
|
|
+ public async Task<IActionResult> ResetSecretKey(JsonElement jsonElement)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (!jsonElement.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
- var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi");
|
|
|
|
|
|
- List<BusinessConfig> busConfigs = await table.FindListByDict<BusinessConfig>(new Dictionary<string, object>() { { "PartitionKey", "BusinessConfig" }, { "RowKey", $"{id}" } });
|
|
|
- if (busConfigs.Count > 0)
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
+ var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
+ var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
|
|
|
+ BizConfig bizConfig = new();
|
|
|
+
|
|
|
+ var response = await cosmosClient.GetContainer("TEAMModelOS", "Normal").ReadItemStreamAsync($"{id}", new PartitionKey("BizConfig"));
|
|
|
+ if (response.Status == 200)
|
|
|
{
|
|
|
- foreach (var busConfig in busConfigs)
|
|
|
- {
|
|
|
- var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, busConfig.RowKey, _option.JwtSecretKey, "business");
|
|
|
- busConfig.jti = auth_token.jti;
|
|
|
- busConfig.token = auth_token.jwt;
|
|
|
- }
|
|
|
- await table.SaveOrUpdateAll(busConfigs);
|
|
|
- return Ok(new { state = RespondCode.Ok, busConfigs });
|
|
|
+ using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ bizConfig = json.ToObject<BizConfig>();
|
|
|
+ var auth_token = JwtAuthExtension.CreateBusinessApiToken(_option.Location, bizConfig.id, _option.JwtSecretKey, "business");
|
|
|
+ bizConfig.jti = auth_token.jti;
|
|
|
+ bizConfig.token = auth_token.jwt;
|
|
|
+
|
|
|
+ bizConfig = await cosmosClient.GetContainer("TEAMModelOS", "Normal").ReplaceItemAsync<BizConfig>(bizConfig, bizConfig.id, new PartitionKey("BizConfig"));
|
|
|
}
|
|
|
- else
|
|
|
- return Ok(new { state = RespondCode.ParamsError, msg = "未找到企业信息" });
|
|
|
+
|
|
|
+ return Ok(new { state = RespondCode.Ok, bizConfig });
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- await _dingDing.SendBotMsg($"OS,{_option.Location} , /biz/reset-bus \n {e.Message}\n{e.StackTrace} \n ", GroupNames.成都开发測試群組);
|
|
|
+ await _dingDing.SendBotMsg($"OS,{_option.Location} , /biz/reset-secretkey \n {e.Message}\n{e.StackTrace} \n ", GroupNames.成都开发測試群組);
|
|
|
return BadRequest();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
|
- /// 依据企业ID查询关联的学校
|
|
|
+ /// 通过企业Id查询用户信息
|
|
|
/// </summary>
|
|
|
/// <param name="jsonElement"></param>
|
|
|
/// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
- [HttpPost("get-companyschool")]
|
|
|
- public async Task<IActionResult> GetCompanySc(JsonElement jsonElement)
|
|
|
+ [HttpPost("get-bizid")]
|
|
|
+ public async Task<IActionResult> GetBizIdUsers(JsonElement jsonElement)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if(!jsonElement.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
-
|
|
|
- var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi");
|
|
|
- Dictionary<string, object> keyValue = new() { { "PartitionKey", $"BusinessSchool" } };
|
|
|
+ if (!jsonElement.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
|
|
|
- if (!string.IsNullOrEmpty($"{id}"))
|
|
|
+ List<BusinessUsers> businessUsers = new();
|
|
|
+ string sql = $"select value(c) from c join s in c.relation where c.code='BizUsers' and s.bizId = '80e1bb6c-acba-46ab-9939-4851c4ef2158'";
|
|
|
+ await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "Normal").GetItemQueryIterator<BusinessUsers>(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("BizUsers") }))
|
|
|
{
|
|
|
- keyValue.Add("bizid", $"{id}");
|
|
|
+ businessUsers.Add(item);
|
|
|
}
|
|
|
|
|
|
- List<BusinessSchool> busSchools = await table.FindListByDict<BusinessSchool>(keyValue);
|
|
|
-
|
|
|
- return Ok(new { state = 200, busSchools });
|
|
|
+ return Ok(new { state = RespondCode.Ok, businessUsers });
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- await _dingDing.SendBotMsg($"OS,{_option.Location} , /biz/get-companyschool \n {e.Message}\n{e.StackTrace} \n ", GroupNames.成都开发測試群組);
|
|
|
+ await _dingDing.SendBotMsg($"OS,{_option.Location} , /biz/get-bizid \n {e.Message}\n{e.StackTrace} \n ", GroupNames.成都开发測試群組);
|
|
|
return BadRequest();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
}
|
|
|
}
|