Skip to content

Commit 220f130

Browse files
authored
Merge pull request #2 from cnblogs/rm-static-httpclient
Rm static httpclient
2 parents 6f9b397 + 8d5c5ab commit 220f130

12 files changed

+158
-123
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,4 +301,5 @@ $RECYCLE.BIN/
301301

302302
# Windows shortcuts
303303
*.lnk
304-
.vscode
304+
.vscode
305+
tests/Sample/appsettings.Development.json

.vscode/launch.json

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
{
2-
"version": "0.2.0",
3-
"configurations": [
2+
// Use IntelliSense to find out which attributes exist for C# debugging
3+
// Use hover for the description of the existing attributes
4+
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
5+
"version": "0.2.0",
6+
"configurations": [
47
{
58
"name": ".NET Core Launch (console)",
69
"type": "coreclr",
710
"request": "launch",
811
"preLaunchTask": "build",
9-
"program": "${workspaceRoot}\\tests\\Sample\\bin\\Debug\\netcoreapp1.0\\Sample.dll",
12+
// If you have changed target frameworks, make sure to update the program path.
13+
"program": "${workspaceFolder}/tests/Sample/bin/Debug/netcoreapp2.0/Sample.dll",
1014
"args": [],
11-
"cwd": "${workspaceRoot}",
12-
"externalConsole": false,
15+
"cwd": "${workspaceFolder}/tests/Sample",
16+
// For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
17+
"console": "internalConsole",
1318
"stopAtEntry": false,
1419
"internalConsoleOptions": "openOnSessionStart"
1520
},
1621
{
1722
"name": ".NET Core Attach",
1823
"type": "coreclr",
1924
"request": "attach",
20-
"processId": "${command.pickProcess}"
25+
"processId": "${command:pickProcess}"
2126
}
22-
]
27+
,]
2328
}

.vscode/tasks.json

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
{
2-
"version": "0.1.0",
3-
"command": "dotnet",
4-
"isShellCommand": true,
5-
"args": [],
2+
"version": "2.0.0",
63
"tasks": [
74
{
8-
"taskName": "build",
5+
"label": "build",
6+
"command": "dotnet",
7+
"type": "process",
98
"args": [
10-
"${workspaceRoot}\\tests\\Sample\\Sample.csproj"
9+
"build",
10+
"${workspaceFolder}/tests/Sample/Sample.csproj"
1111
],
12-
"isBuildCommand": true,
1312
"problemMatcher": "$msCompile"
1413
}
1514
]

src/Api/Base/BaseOssCommand.cs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public virtual async Task<OssResult<TResult>> ParseResultAsync(HttpResponseMessa
4242
var result = SerializeHelper.Deserialize<TResult>(await response.Content.ReadAsStreamAsync());
4343
var ossResult = new OssResult<TResult>()
4444
{
45-
IsSuccess = true,
45+
IsSuccess = true,
4646
SuccessResult = result
4747
};
4848

@@ -51,7 +51,7 @@ public virtual async Task<OssResult<TResult>> ParseResultAsync(HttpResponseMessa
5151

5252
return new OssResult<TResult>()
5353
{
54-
IsSuccess = false,
54+
IsSuccess = false,
5555
ErrorMessage = "ContentLength = 0"
5656
};
5757
}
@@ -60,22 +60,22 @@ public virtual async Task<OssResult<TResult>> ParseResultAsync(HttpResponseMessa
6060
/// 执行请求并返回结果
6161
/// </summary>
6262
/// <returns></returns>
63-
public async Task<OssResult<TResult>> ExecuteAsync()
63+
public async Task<OssResult<TResult>> ExecuteAsync(HttpClient client)
6464
{
6565
try
6666
{
6767
ServiceRequest request = BuildRequest();
6868

6969
//加入dateheader
70-
request.Headers[HttpHeaders.Date] = DateUtils.FormatRfc822Date(DateTime.UtcNow);
70+
request.Headers[HttpHeaders.Date] = DateUtils.FormatRfc822Date(DateTime.UtcNow);
7171

7272
if (RequestContext.OssCredential.UseToken)
7373
{
7474
request.Headers[HttpHeaders.SecurityToken] = RequestContext.OssCredential.SecurityToken;
7575
}
7676

7777
// 发送请求
78-
var caller = new ServiceCaller(RequestContext);
78+
var caller = new ServiceCaller(RequestContext, client);
7979
HttpResponseMessage response = await caller.CallServiceAsync(request);
8080

8181
// 解析结果
@@ -90,7 +90,7 @@ public async Task<OssResult<TResult>> ExecuteAsync()
9090
ErrorMessage = ex.Message
9191
};
9292
}
93-
93+
9494
}
9595

9696
/// <summary>
@@ -108,17 +108,18 @@ private async Task<OssResult<TResult>> ProcessResponseInternal(HttpResponseMessa
108108
{
109109
return new OssResult<TResult>()
110110
{
111-
IsSuccess = false,
111+
IsSuccess = false,
112112
ErrorMessage = "NOT_MODIFIED"
113113
};
114-
}else
114+
}
115+
else
115116
{
116117
//错误的http代码
117118
if (response.Content?.Headers.ContentLength > 0)
118119
{
119120
var errorResult =
120121
SerializeHelper.Deserialize<ErrorResult>(await response.Content.ReadAsStreamAsync());
121-
122+
122123
return new OssResult<TResult>()
123124
{
124125
IsSuccess = false,

src/Cuiliang.AliyunOssSdk.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,9 @@
1010
</PropertyGroup>
1111
<ItemGroup>
1212
<Folder Include="Properties\" />
13+
</ItemGroup>
14+
<ItemGroup>
15+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.1.0" />
16+
<PackageReference Include="Microsoft.Extensions.Http" Version="2.1.0" />
1317
</ItemGroup>
1418
</Project>

src/Cuiliang.AliyunOssSdk.xproj

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/OssClient.cs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5+
using System.Net.Http;
56
using System.Threading.Tasks;
67
using Cuiliang.AliyunOssSdk.Api;
78
using Cuiliang.AliyunOssSdk.Api.Bucket.List;
@@ -24,17 +25,13 @@ namespace Cuiliang.AliyunOssSdk
2425
/// </summary>
2526
public class OssClient
2627
{
27-
private RequestContext _requestContext = null;
28+
private readonly HttpClient _client;
29+
private readonly RequestContext _requestContext;
2830

29-
public OssClient(OssCredential credential)
30-
:this(credential, ClientConfiguration.Default)
31+
public OssClient(HttpClient client, RequestContext requestContext)
3132
{
32-
33-
}
34-
35-
public OssClient(OssCredential credential, ClientConfiguration config)
36-
{
37-
_requestContext = new RequestContext(credential, config);
33+
_client = client;
34+
_requestContext = requestContext;
3835
}
3936

4037
/// <summary>
@@ -44,7 +41,7 @@ public OssClient(OssCredential credential, ClientConfiguration config)
4441
public async Task<OssResult<ListBucketsResult>> ListBucketsAsync(string region)
4542
{
4643
var cmd = new ListBucketCommand(_requestContext, region, new ListBucketsRequest());
47-
return await cmd.ExecuteAsync();
44+
return await cmd.ExecuteAsync(_client);
4845
}
4946

5047
/// <summary>
@@ -58,7 +55,7 @@ public async Task<OssResult<PutObjectResult>> PutObjectAsync(BucketInfo bucket,
5855
{
5956
var cmd = new PutObjectCommand(_requestContext, bucket, key, file, null);
6057

61-
return await cmd.ExecuteAsync();
58+
return await cmd.ExecuteAsync(_client);
6259
}
6360

6461
/// <summary>
@@ -113,14 +110,14 @@ public async Task<OssResult<PutObjectResult>> PutObjectByFileNameAsync(BucketInf
113110
/// <param name="targetKey"></param>
114111
/// <param name="extraHeaders"></param>
115112
/// <returns></returns>
116-
public async Task<OssResult<CopyObjectResult>> CopyObjectAsync(BucketInfo bucket, string srcKey,
113+
public async Task<OssResult<CopyObjectResult>> CopyObjectAsync(BucketInfo bucket, string srcKey,
117114
BucketInfo targetBucket,
118-
string targetKey,
115+
string targetKey,
119116
IDictionary<string, string> extraHeaders = null)
120117
{
121118
var cmd = new CopyObjectCommand(_requestContext, targetBucket, targetKey, bucket, srcKey, extraHeaders);
122119

123-
return await cmd.ExecuteAsync();
120+
return await cmd.ExecuteAsync(_client);
124121
}
125122

126123
/// <summary>
@@ -134,7 +131,7 @@ public async Task<OssResult<GetObjectResult>> GetObjectAsync(BucketInfo bucket,
134131
{
135132
var cmd = new GetObjectCommand(_requestContext, bucket, key, parameters);
136133

137-
return await cmd.ExecuteAsync();
134+
return await cmd.ExecuteAsync(_client);
138135
}
139136

140137
/// <summary>
@@ -150,7 +147,7 @@ public async Task<OssResult<AppentObjectResult>> AppendObject(BucketInfo bucket,
150147
{
151148
var cmd = new AppendObjectCommand(_requestContext, bucket, key, nextAppendPosition, file);
152149

153-
return await cmd.ExecuteAsync();
150+
return await cmd.ExecuteAsync(_client);
154151
}
155152

156153
/// <summary>
@@ -163,7 +160,7 @@ public async Task<OssResult<DeleteObjectResult>> DeleteObjectAsync(BucketInfo bu
163160
{
164161
var cmd = new DeleteObjectCommand(_requestContext, bucket, key);
165162

166-
return await cmd.ExecuteAsync();
163+
return await cmd.ExecuteAsync(_client);
167164
}
168165

169166
/// <summary>
@@ -178,7 +175,7 @@ public async Task<OssResult<DeleteMultipleObjectsResult>> DeleteMultipleObjectsA
178175
{
179176
var cmd = new DeleteMultipleObjectsCommand(_requestContext, bucket, keys, quiet);
180177

181-
return await cmd.ExecuteAsync();
178+
return await cmd.ExecuteAsync(_client);
182179
}
183180

184181
/// <summary>
@@ -191,7 +188,7 @@ public async Task<OssResult<DeleteMultipleObjectsResult>> DeleteMultipleObjectsA
191188
public async Task<OssResult<HeadObjectResult>> HeadObjectAsync(BucketInfo bucket, string key, HeadObjectParams parameters)
192189
{
193190
var cmd = new HeadObjectCommand(_requestContext, bucket, key, parameters);
194-
return await cmd.ExecuteAsync();
191+
return await cmd.ExecuteAsync(_client);
195192
}
196193

197194
/// <summary>
@@ -203,7 +200,7 @@ public async Task<OssResult<HeadObjectResult>> HeadObjectAsync(BucketInfo bucket
203200
public async Task<OssResult<GetObjectMetaResult>> GetObjectMetaAsync(BucketInfo bucket, string key)
204201
{
205202
var cmd = new GetObjectMetaCommand(_requestContext, bucket, key);
206-
return await cmd.ExecuteAsync();
203+
return await cmd.ExecuteAsync(_client);
207204
}
208205
}
209206
}

src/OssClientExtensions.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System;
2+
using Cuiliang.AliyunOssSdk;
3+
using Cuiliang.AliyunOssSdk.Api.Bucket.List;
4+
using Cuiliang.AliyunOssSdk.Entites;
5+
using Cuiliang.AliyunOssSdk.Request;
6+
using Microsoft.Extensions.Configuration;
7+
using Microsoft.Extensions.DependencyInjection;
8+
9+
namespace Cuiliang.AliyunOssSdk
10+
{
11+
public static class OssClientExtensions
12+
{
13+
public static IServiceCollection AddOssClient(this IServiceCollection services,
14+
IConfigurationSection ossClientConf, ClientConfiguration config = null)
15+
{
16+
var credential = new OssCredential();
17+
ossClientConf.Bind(credential);
18+
19+
var requestContext = new RequestContext(credential, config ?? ClientConfiguration.Default);
20+
21+
services.AddSingleton<RequestContext>(requestContext);
22+
services.AddHttpClient<OssClient>();
23+
24+
return services;
25+
}
26+
}
27+
}

src/Request/ServiceCaller.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ namespace Cuiliang.AliyunOssSdk.Request
1616
/// </summary>
1717
public class ServiceCaller
1818
{
19-
private readonly static HttpClient _client = new HttpClient();
2019
private RequestContext _requestContext;
20+
private readonly HttpClient _client;
2121

22-
public ServiceCaller(RequestContext requestContext)
22+
public ServiceCaller(RequestContext requestContext, HttpClient client)
2323
{
2424
_requestContext = requestContext;
25+
_client = client;
2526
}
2627

2728
/// <summary>
@@ -30,7 +31,7 @@ public ServiceCaller(RequestContext requestContext)
3031
/// <param name="serviceRequest"></param>
3132
/// <returns></returns>
3233
public async Task<HttpResponseMessage> CallServiceAsync(ServiceRequest serviceRequest)
33-
{
34+
{
3435
var request = new HttpRequestMessage(serviceRequest.HttpMethod,
3536
serviceRequest.BuildRequestUri(_requestContext));
3637

@@ -63,19 +64,20 @@ public async Task<HttpResponseMessage> CallServiceAsync(ServiceRequest serviceRe
6364
// request content
6465
//
6566

66-
if (serviceRequest.RequestContentType != RequestContentType.None
67+
if (serviceRequest.RequestContentType != RequestContentType.None
6768
&& (serviceRequest.HttpMethod == HttpMethod.Put || serviceRequest.HttpMethod == HttpMethod.Post))
6869
{
6970
if (serviceRequest.RequestContentType == RequestContentType.String)
7071
{
7172
request.Content = new StringContent(serviceRequest.StringContent, Encoding.UTF8, serviceRequest.ContentMimeType);
72-
}else if (serviceRequest.RequestContentType == RequestContentType.Stream)
73+
}
74+
else if (serviceRequest.RequestContentType == RequestContentType.Stream)
7375
{
7476
request.Content = new StreamContent(serviceRequest.StreamContent);
7577
request.Content.Headers.ContentType =
7678
MediaTypeHeaderValue.Parse(serviceRequest.ContentMimeType);
7779
}
78-
80+
7981
}
8082

8183
if (serviceRequest.ContentMd5 != null && request.Content != null)

0 commit comments

Comments
 (0)