Skip to content

Commit 7a6ca48

Browse files
committed
合并 https://github.com/cnblogs/Cuiliang.AliyunOssSdk 代码,将httpclient转换为静态对象。
1 parent 742f5a2 commit 7a6ca48

File tree

9 files changed

+41
-147
lines changed

9 files changed

+41
-147
lines changed

Cuiliang.AliyunOssSdk.sln

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 15
4-
VisualStudioVersion = 15.0.26020.0
4+
VisualStudioVersion = 15.0.27130.2026
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Cuiliang.AliyunOssSdk", "src\Cuiliang.AliyunOssSdk.csproj", "{07E0FD05-ED53-49DC-AD10-D24685A388D3}"
77
EndProject
8-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample", "tests\Sample\Sample.csproj", "{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sample", "tests\Sample\Sample.csproj", "{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}"
99
EndProject
1010
Global
1111
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,30 +19,33 @@ Global
1919
GlobalSection(ProjectConfigurationPlatforms) = postSolution
2020
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
2121
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
22-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x64.ActiveCfg = Debug|x64
23-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x64.Build.0 = Debug|x64
24-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x86.ActiveCfg = Debug|x86
25-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x86.Build.0 = Debug|x86
22+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x64.ActiveCfg = Debug|Any CPU
23+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x64.Build.0 = Debug|Any CPU
24+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x86.ActiveCfg = Debug|Any CPU
25+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Debug|x86.Build.0 = Debug|Any CPU
2626
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
2727
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|Any CPU.Build.0 = Release|Any CPU
28-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x64.ActiveCfg = Release|x64
29-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x64.Build.0 = Release|x64
30-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x86.ActiveCfg = Release|x86
31-
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x86.Build.0 = Release|x86
28+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x64.ActiveCfg = Release|Any CPU
29+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x64.Build.0 = Release|Any CPU
30+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x86.ActiveCfg = Release|Any CPU
31+
{07E0FD05-ED53-49DC-AD10-D24685A388D3}.Release|x86.Build.0 = Release|Any CPU
3232
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
3333
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|Any CPU.Build.0 = Debug|Any CPU
34-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x64.ActiveCfg = Debug|x64
35-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x64.Build.0 = Debug|x64
36-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x86.ActiveCfg = Debug|x86
37-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x86.Build.0 = Debug|x86
34+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x64.ActiveCfg = Debug|Any CPU
35+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x64.Build.0 = Debug|Any CPU
36+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x86.ActiveCfg = Debug|Any CPU
37+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Debug|x86.Build.0 = Debug|Any CPU
3838
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|Any CPU.ActiveCfg = Release|Any CPU
3939
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|Any CPU.Build.0 = Release|Any CPU
40-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x64.ActiveCfg = Release|x64
41-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x64.Build.0 = Release|x64
42-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x86.ActiveCfg = Release|x86
43-
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x86.Build.0 = Release|x86
40+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x64.ActiveCfg = Release|Any CPU
41+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x64.Build.0 = Release|Any CPU
42+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x86.ActiveCfg = Release|Any CPU
43+
{A83B76BE-EAEA-4367-BC0C-28C20A9E6510}.Release|x86.Build.0 = Release|Any CPU
4444
EndGlobalSection
4545
GlobalSection(SolutionProperties) = preSolution
4646
HideSolutionNode = FALSE
4747
EndGlobalSection
48+
GlobalSection(ExtensibilityGlobals) = postSolution
49+
SolutionGuid = {961F679A-9DCD-42D9-8CE7-5B3F6B9019AD}
50+
EndGlobalSection
4851
EndGlobal

src/Api/Base/BaseOssCommand.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,15 +67,13 @@ public async Task<OssResult<TResult>> ExecuteAsync()
6767
ServiceRequest request = BuildRequest();
6868

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

7372
if (RequestContext.OssCredential.UseToken)
7473
{
7574
request.Headers[HttpHeaders.SecurityToken] = RequestContext.OssCredential.SecurityToken;
7675
}
7776

78-
7977
// 发送请求
8078
var caller = new ServiceCaller(RequestContext);
8179
HttpResponseMessage response = await caller.CallServiceAsync(request);

src/Cuiliang.AliyunOssSdk.csproj

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,14 @@
11
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
22
<PropertyGroup>
3-
<TargetFramework>netstandard1.6</TargetFramework>
4-
<NoWarn>$(NoWarn);CS1998</NoWarn>
5-
<AssemblyName>Cuiliang.AliyunOssSdk</AssemblyName>
6-
<PackageTargetFallback Condition=" '$(TargetFramework)' == 'netstandard1.6' ">$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
7-
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
8-
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
9-
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
10-
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
3+
<Version>0.2.0</Version>
4+
<TargetFramework>netstandard2.0</TargetFramework>
115
<Authors>cuiliang.bj@gmail.com</Authors>
126
<Description>Aliyun oss sdk for dotnet core.</Description>
137
<PackageTags>Aliyun</PackageTags>
148
<RepositoryUrl>https://github.com/cuiliang/Cuiliang.AliyunOssSdk</RepositoryUrl>
9+
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
1510
</PropertyGroup>
1611
<ItemGroup>
17-
<PackageReference Include="System.Collections.NonGeneric">
18-
<Version>4.3.0</Version>
19-
</PackageReference>
20-
<PackageReference Include="System.Runtime.Serialization.Xml">
21-
<Version>4.3.0</Version>
22-
</PackageReference>
23-
<PackageReference Include="System.Security.Cryptography.Primitives">
24-
<Version>4.3.0</Version>
25-
</PackageReference>
26-
<PackageReference Include="System.Threading.Thread">
27-
<Version>4.3.0</Version>
28-
</PackageReference>
29-
<PackageReference Include="System.Xml.XmlDocument">
30-
<Version>4.3.0</Version>
31-
</PackageReference>
32-
<PackageReference Include="System.Xml.XmlSerializer">
33-
<Version>4.3.0</Version>
34-
</PackageReference>
35-
</ItemGroup>
36-
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
37-
<DefineConstants>$(DefineConstants);RELEASE</DefineConstants>
38-
</PropertyGroup>
12+
<Folder Include="Properties\" />
13+
</ItemGroup>
3914
</Project>

src/OssClient.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public OssClient(OssCredential credential, ClientConfiguration config)
4343
/// <returns></returns>
4444
public async Task<OssResult<ListBucketsResult>> ListBucketsAsync(string region)
4545
{
46-
4746
var cmd = new ListBucketCommand(_requestContext, region, new ListBucketsRequest());
4847
return await cmd.ExecuteAsync();
4948
}

src/Properties/AssemblyInfo.cs

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

src/Request/ServiceCaller.cs

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

2122
public ServiceCaller(RequestContext requestContext)
@@ -29,72 +30,38 @@ public ServiceCaller(RequestContext requestContext)
2930
/// <param name="serviceRequest"></param>
3031
/// <returns></returns>
3132
public async Task<HttpResponseMessage> CallServiceAsync(ServiceRequest serviceRequest)
32-
{
33-
//
34-
HttpClient client = null;
35-
36-
37-
38-
//
39-
// setup proxy
40-
//
41-
if (!string.IsNullOrWhiteSpace(_requestContext.ClientConfiguration.ProxyHost))
42-
{
43-
HttpClientHandler httpClientHandler = new HttpClientHandler()
44-
{
45-
Proxy = new MyProxy(string.Format("{0}:{1}", _requestContext.ClientConfiguration.ProxyHost, _requestContext.ClientConfiguration.ProxyPort)),
46-
PreAuthenticate = false,
47-
UseDefaultCredentials = true,
48-
};
49-
50-
if (!String.IsNullOrEmpty(_requestContext.ClientConfiguration.ProxyUserName))
51-
{
52-
httpClientHandler.Proxy.Credentials = String.IsNullOrEmpty(_requestContext.ClientConfiguration.ProxyDomain)
53-
? new NetworkCredential(_requestContext.ClientConfiguration.ProxyUserName, _requestContext.ClientConfiguration.ProxyPassword ?? string.Empty)
54-
: new NetworkCredential(_requestContext.ClientConfiguration.ProxyUserName, _requestContext.ClientConfiguration.ProxyPassword ?? string.Empty,
55-
_requestContext.ClientConfiguration.ProxyDomain);
56-
57-
httpClientHandler.UseDefaultCredentials = false;
58-
httpClientHandler.PreAuthenticate = true;
59-
}
60-
61-
client = new HttpClient(httpClientHandler);
62-
}
63-
else
64-
{
65-
client = new HttpClient();
66-
}
67-
68-
33+
{
6934
var request = new HttpRequestMessage(serviceRequest.HttpMethod,
7035
serviceRequest.BuildRequestUri(_requestContext));
7136

7237
//
7338
// setup headers
7439
//
75-
7640
// 超时时间,毫秒
77-
client.Timeout = TimeSpan.FromMilliseconds(_requestContext.ClientConfiguration.ConnectionTimeout);
41+
//httpclient 默认100s
42+
// httpclient的 BaseAddress TimeOut MaxResponseContentBufferSize 属性 只能被设置一次
43+
//第二次设置就会出现异常:
44+
//“This instance has already started one or more requests.
45+
// Properties can only be modified before sending the first request.”
46+
if (_requestContext.ClientConfiguration.ConnectionTimeout != -1)
47+
_client.Timeout = TimeSpan.FromMilliseconds(_requestContext.ClientConfiguration.ConnectionTimeout);
7848
foreach (var h in serviceRequest.Headers)
7949
{
8050
bool rtn = request.Headers.TryAddWithoutValidation(h.Key, h.Value);
8151
if (rtn == false)
8252
{
83-
//throw new InvalidOperationException("不支持的header:" + h.Key);
84-
Console.WriteLine("不支持的header:" + h.Key);
53+
throw new InvalidOperationException("不支持的header:" + h.Key);
8554
}
8655
}
8756

8857
if (!string.IsNullOrWhiteSpace(_requestContext.ClientConfiguration.UserAgent))
8958
{
90-
client.DefaultRequestHeaders.UserAgent.TryParseAdd(_requestContext.ClientConfiguration.UserAgent);
59+
_client.DefaultRequestHeaders.UserAgent.TryParseAdd(_requestContext.ClientConfiguration.UserAgent);
9160

9261
}
9362

9463
// request content
95-
//
96-
97-
64+
//
9865

9966
if (serviceRequest.RequestContentType != RequestContentType.None
10067
&& (serviceRequest.HttpMethod == HttpMethod.Put || serviceRequest.HttpMethod == HttpMethod.Post))
@@ -119,11 +86,9 @@ public async Task<HttpResponseMessage> CallServiceAsync(ServiceRequest serviceRe
11986
// 因为传入的contenttype会被自动更改,所以在最后再进行签名处理
12087
SignatureHelper.SignRequest(serviceRequest, _requestContext.OssCredential, request);
12188

122-
123-
12489
// 需要增加是因为objectMeta和head API返回的消息体是空的,但是content-length却是实际object的长度,此处违反了协议。
12590
// 使用默认参数会自动读取content,导致异常。
126-
return await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
91+
return await _client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
12792
}
12893
}
12994
}

src/Request/SignatureHelper.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,6 @@ public static string HmacSha1Sign(
5959
var strToSign =
6060
$"{httpMethod.ToUpper()}\n{contentMd5}\n{contentType}\n{date}\n{canonicalizedOSSHeaders}{canonicalizedResource}";
6161

62-
//Console.WriteLine("String to sign:" + strToSign);
63-
6462
return HmacSha1Sign(accessKeySecret, strToSign);
6563
}
6664

src/project.json

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

tests/Sample/Sample.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0">
22
<PropertyGroup>
33
<OutputType>Exe</OutputType>
4-
<TargetFramework>netcoreapp1.0</TargetFramework>
4+
<TargetFramework>netcoreapp2.0</TargetFramework>
55
</PropertyGroup>
66
<ItemGroup>
77
<ProjectReference Include="..\..\src\Cuiliang.AliyunOssSdk.csproj" />

0 commit comments

Comments
 (0)