chr
2024-08-07 22beee93f14d042aa184148c53efb79e23416526
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
using PdmSwPlugin.Common.Entity.System;
using PdmSwPlugin.Common.Setting;
using System;
using System.Net.Http;
using System.Threading.Tasks;
 
namespace PdmSwPlugin.Common.Util.Http
{
    public class HttpClientCreator
    {
        private static readonly string ApiKey = "X-Access-Token";
        private static readonly string PluginKey = "Client-Access-Token";
        public static readonly string BASE_CLIENT_NAME = "BaseClient";
 
        public static HttpClientCreator _singleton;
 
        public readonly int TimeOut;
        public readonly string BaseAddress;
        public readonly string ClientUsername;
        public readonly string Token;
 
 
        private HttpClient _instance;
        public HttpClient Client
        {
            get => _instance;
        }
 
        /// <summary>
        /// 获取单例Creator
        /// </summary>
        /// <returns></returns>
        public static HttpClientCreator GetSingleton(HttpConfig config)
        {
            if (_singleton == null)
            {
                _singleton = new HttpClientCreator(config);
            }
            return _singleton;
        }
 
        /// <summary>
        /// 根据配置生成creater
        /// </summary>
        /// <param name="config"></param>
        public HttpClientCreator()
        {
 
            PluginSetting setting = PluginSetting.Instance;
            TimeOut = setting.TimeOut;
            BaseAddress = setting.BaseAddress;
            ClientUsername = PdmUser.LoginUser?.username;
            Token = PdmUser.LoginUser?.token;
        }
 
        /// <summary>
        /// 根据配置生成creater
        /// </summary>
        /// <param name="config"></param>
        public HttpClientCreator(HttpConfig config)
        {
            TimeOut = config.Timeout;
            BaseAddress = config.BaseAddress;
            ClientUsername = PdmUser.LoginUser?.username;
            Token = PdmUser.LoginUser?.token;
        }
 
        /// <summary>
        /// 创建客户端
        /// </summary>
        /// <returns></returns>
        public HttpClient GetClient()
        {
            PluginSetting setting = PluginSetting.Instance;
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(BaseAddress);
            client.Timeout = TimeSpan.FromSeconds(TimeOut);
            //if (setting.ClassicLogin)
            //{
            //    client.DefaultRequestHeaders.Add(ApiKey, Token);
            //}
            //else
            //{
            //    client.DefaultRequestHeaders.Add(PluginKey, ClientUsername);
            //}
            client.DefaultRequestHeaders.Add(PluginKey, ClientUsername);
            return client;
        }
 
        /// <summary>
        /// 单例客户端
        /// </summary>
        /// <returns></returns>
        public HttpClient GetInstance()
        {
            if (_instance == null)
            {
                _instance = GetClient();
            }
            return _instance;
        }
 
        public static Result<T> GetSyncAction<T>(string url, object data)
        {
            HttpClient client = new HttpClient();
            PluginSetting setting = PluginSetting.Instance;
 
            client.BaseAddress = new Uri(setting.BaseAddress);
            client.Timeout = TimeSpan.FromSeconds(setting.TimeOut);
 
            return client.GetSyncAction<T>(url, data);
        }
 
        public static Task<Result<T>> PostAsyncAction<T>(string url, object data)
        {
            HttpClient client = new HttpClient();
            PluginSetting setting = PluginSetting.Instance;
 
            client.BaseAddress = new Uri(setting.BaseAddress);
            client.Timeout = TimeSpan.FromSeconds(setting.TimeOut);
 
            return client.PostAsyncAction<T>(url, data);
        }
 
        public static Result<T> PostSyncAction<T>(string url, object data)
        {
            HttpClient client = new HttpClient();
            PluginSetting setting = PluginSetting.Instance;
 
            client.BaseAddress = new Uri(setting.BaseAddress);
            client.Timeout = TimeSpan.FromSeconds(setting.TimeOut);
 
            return client.PostSyncAction<T>(data, url);
        }
 
    }
 
    public class HttpConfig
    {
        private int _Timeout;
 
        public int Timeout
        {
            get { return _Timeout; }
        }
 
        private string _BaseAddress;
 
        public string BaseAddress
        {
            get { return _BaseAddress; }
        }
 
        private string _ClientUsername;
 
        public string ClientUsername
        {
            get { return _ClientUsername; }
        }
 
        /// <summary>
        /// Http工具基础配置
        /// </summary>
        /// <param name="timeout">超时时间</param>
        /// <param name="baseAddress">基础URL</param>
        /// <param name="clientUsername">客户端用户名,需要在PDM里注册</param>
        public HttpConfig(int timeout, string baseAddress, string clientUsername)
        {
            _Timeout = timeout;
            _BaseAddress = baseAddress;
            _ClientUsername = clientUsername;
        }
 
        /// <summary>
        /// Http工具基础配置
        /// </summary>
        /// <param name="timeout">超时时间</param>
        /// <param name="baseAddress">基础URL</param>
        public HttpConfig(int timeout, string baseAddress)
        {
            _Timeout = timeout;
            _BaseAddress = baseAddress;
            _ClientUsername = System.Environment.UserName;
        }
 
        /// <summary>
        /// Http工具基础配置,timeout默认300
        /// </summary>
        /// <param name="baseAddress">基础URL</param>
        public HttpConfig(string baseAddress)
        {
            _Timeout = 600;
            _BaseAddress = baseAddress;
            _ClientUsername = System.Environment.UserName;
        }
    }
}