啊鑫
9 天以前 0aa54059b26e6641196e9953490dd18616e916e3
Controllers/AuthController.cs
@@ -1,23 +1,20 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Cryptography;
using Newtonsoft.Json;
using System.Text;
using System.Net;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.Extensions.Hosting;
using System.Security.Cryptography;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace NewPdaSqlServer.Controllers
{
namespace NewPdaSqlServer.Controllers;
    [Route("api/[controller]")]
    [ApiController]
    public class AuthController : ControllerBase
    {
        // 以下常量建议放在appsettings.json配置文件中
        private const string APPID = "303233EF-AC39-40C1-8364-AC989C6258A5";
        private const string SECRET = "30b41949-bcfb-48f8-9847-feb6e043fe72";
        // private const string SPK = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApobID/gwmD9OofMG1gEcE94NCMeTYUq1cam/7ADZmxHCVpF143GaHWhqDdY0TTVbcUElsQ71DzAG2j3itWlIJBK5fVGwCo3sPpAvUDdKMh+Uivcp7yxdy/IDRA/PS4JARuEyM4cVJLhIOU2KnSlbIkheeoDkDgfaxu9kKrWnozJLiYraVTVDz9PdRX7fQdP+Zu/xB9txAGw4kvOm9HwgrzaSRdZEhisTJ5yyoNW/dLXtWKXA0cKhKOOIFu12TOrv/It6hl1ShTUuy79Pa51M9Oc2dEfVs1tluNXPWo1uFXQbBaJxdqZEJJlK7iW2uQFIao2O4XFHYThwy2+6116LtwIDAQAB";
        private const string HOST = "http://192.168.1.149:8099";
@@ -43,17 +40,16 @@
            try
            {
                var response = http.PostDataSSL($"{HOST}/api/ec/dev/auth/applytoken",
            var response = http.PostDataSSL(
                $"{HOST}/api/ec/dev/auth/applytoken",
                    new Dictionary<string, string>(), headers);
                if (!string.IsNullOrEmpty(response))
                {
                    var res = JsonConvert.DeserializeObject<dynamic>(response);
                    if (res.status == "true")
                    {
                        return res.token.ToString();
                if (res.status == "true") return res.token.ToString();
                    }
                }
                return BadRequest("Failed to get token");
            }
            catch (Exception ex)
@@ -71,16 +67,17 @@
            var tokenResult = http.GetToken();
            if (tokenResult is not null)
            {
                Uri url = new Uri($"{HOST}/api/T100/GetSecretUserId");
            var url = new Uri($"{HOST}/api/T100/GetSecretUserId");
                return http.GetOaKqInfo(url, tokenResult, "DQ000344");
            }
            return BadRequest("无法获取有效Token");
        }
        [HttpPost("createWorkflow")]
        public ActionResult<string> CreateWorkflowRequest([FromBody] WorkflowRequestDto request)
    public ActionResult<string> CreateWorkflowRequest(
        [FromBody] WorkflowRequestDto request)
        {
            try
            {
@@ -105,10 +102,12 @@
                // 添加可选参数
                if (request.DetailData != null)
                    parameters.Add("detailData", JsonConvert.SerializeObject(request.DetailData));
                parameters.Add("detailData",
                    JsonConvert.SerializeObject(request.DetailData));
                if (request.OtherParams != null)
                    parameters.Add("otherParams", JsonConvert.SerializeObject(request.OtherParams));
                parameters.Add("otherParams",
                    JsonConvert.SerializeObject(request.OtherParams));
                // 发送请求
                var response = new HttpManager().PostDataSSL(
@@ -138,7 +137,8 @@
            rsa.ImportFromPem(publicKeyPem);  // 使用.NET 5+ 内置PEM解析方法
            var parameters = rsa.ExportParameters(false);
            string publicKeyXml = $"<RSAKeyValue><Modulus>{Convert.ToBase64String(parameters.Modulus)}</Modulus><Exponent>{Convert.ToBase64String(parameters.Exponent)}</Exponent></RSAKeyValue>";
        var publicKeyXml =
            $"<RSAKeyValue><Modulus>{Convert.ToBase64String(parameters.Modulus)}</Modulus><Exponent>{Convert.ToBase64String(parameters.Exponent)}</Exponent></RSAKeyValue>";
            using var rsaProvider = new RSACryptoServiceProvider();
            rsaProvider.FromXmlString(publicKeyXml);  // 使用转换后的XML格式公钥
@@ -151,11 +151,11 @@
    public class HttpManager
    {
        private readonly HttpClient _client = new HttpClient();
        // 以下常量建议放在appsettings.json配置文件中
        private const string APPID = "303233EF-AC39-40C1-8364-AC989C6258A5";
        private const string SECRET = "30b41949-bcfb-48f8-9847-feb6e043fe72";
        // private const string SPK = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApobID/gwmD9OofMG1gEcE94NCMeTYUq1cam/7ADZmxHCVpF143GaHWhqDdY0TTVbcUElsQ71DzAG2j3itWlIJBK5fVGwCo3sPpAvUDdKMh+Uivcp7yxdy/IDRA/PS4JARuEyM4cVJLhIOU2KnSlbIkheeoDkDgfaxu9kKrWnozJLiYraVTVDz9PdRX7fQdP+Zu/xB9txAGw4kvOm9HwgrzaSRdZEhisTJ5yyoNW/dLXtWKXA0cKhKOOIFu12TOrv/It6hl1ShTUuy79Pa51M9Oc2dEfVs1tluNXPWo1uFXQbBaJxdqZEJJlK7iW2uQFIao2O4XFHYThwy2+6116LtwIDAQAB";
        private const string HOST = "http://192.168.1.149:8099";
@@ -169,6 +169,8 @@
twIDAQAB
-----END PUBLIC KEY-----";
    private readonly HttpClient _client = new();
        public string PostDataSSL(string url,
            Dictionary<string, string> parameters,
            Dictionary<string, string> headers)
@@ -176,15 +178,11 @@
            var request = new HttpRequestMessage(HttpMethod.Post, url);
            foreach (var header in headers)
            {
                request.Headers.Add(header.Key, header.Value);
            }
            // 如果需要表单参数
            if (parameters.Count > 0)
            {
                request.Content = new FormUrlEncodedContent(parameters);
            }
            var response = _client.SendAsync(request).Result;
            return response.Content.ReadAsStringAsync().Result;
@@ -192,8 +190,6 @@
        public string GetToken()
        {
            var http = new HttpManager();
            var headers = new Dictionary<string, string>
            {
@@ -203,17 +199,16 @@
            try
            {
                var response = http.PostDataSSL($"{HOST}/api/ec/dev/auth/applytoken",
            var response = http.PostDataSSL(
                $"{HOST}/api/ec/dev/auth/applytoken",
                    new Dictionary<string, string>(), headers);
                if (!string.IsNullOrEmpty(response))
                {
                    var res = JsonConvert.DeserializeObject<dynamic>(response);
                    if (res.status == "true")
                    {
                        return res.token.ToString();
                if (res.status == "true") return res.token.ToString();
                    }
                }
                return "token不存在!";
            }
            catch (Exception ex)
@@ -227,13 +222,15 @@
        {
            try
            {
                ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;
            ServicePointManager.ServerCertificateValidationCallback +=
                (s, cert, chain, sslPolicyErrors) => true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                var request = WebRequest.Create(url) as HttpWebRequest;
                request.Method = "POST";
                request.Timeout = 20000;  // 20秒超时
                request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";  // 明确指定编码
            request.ContentType =
                "application/x-www-form-urlencoded; charset=utf-8"; // 明确指定编码
                // 添加调试头信息
                request.Headers.Add("appid", APPID);
@@ -242,12 +239,14 @@
                // 构建带时区的日期参数
                var postData = new StringBuilder();
                var dateParam = DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:sszzz");
            var dateParam = DateTime.Now.AddDays(-1)
                .ToString("yyyy-MM-ddTHH:mm:sszzz");
                postData.AppendFormat("KQSDATE={0}&KQEDATE={1}",
                    Uri.EscapeDataString(dateParam),
                    Uri.EscapeDataString(dateParam));
                byte[] byteData = Encoding.UTF8.GetBytes(postData.ToString());  // 改用UTF8编码
            var byteData =
                Encoding.UTF8.GetBytes(postData.ToString()); // 改用UTF8编码
                // 更完善的请求写入
                using (var stream = request.GetRequestStream())
@@ -259,9 +258,8 @@
                using (var response = request.GetResponse() as HttpWebResponse)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new WebException($"服务器返回错误状态码: {(int)response.StatusCode} {response.StatusDescription}");
                    }
                    throw new WebException(
                        $"服务器返回错误状态码: {(int)response.StatusCode} {response.StatusDescription}");
                    using (var stream = response.GetResponseStream())
                    using (var reader = new StreamReader(stream, Encoding.UTF8))
@@ -276,8 +274,10 @@
                var errorStream = response.GetResponseStream();
                using (var reader = new StreamReader(errorStream))
                {
                    string errorDetails = reader.ReadToEnd();
                    throw new Exception($"请求失败 [Status: {response.StatusCode}]: {errorDetails}", ex);
                var errorDetails = reader.ReadToEnd();
                throw new Exception(
                    $"请求失败 [Status: {response.StatusCode}]: {errorDetails}",
                    ex);
                }
            }
            catch (Exception ex)
@@ -324,5 +324,4 @@
        /// 其他参数(选填)
        /// </summary>
        public Dictionary<string, object> OtherParams { get; set; }
    }
}