Skip to content

Commit

Permalink
修改IStringFormatter接口
Browse files Browse the repository at this point in the history
  • Loading branch information
xljiulang committed Jan 9, 2018
1 parent 9e40fe3 commit 371a166
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 25 deletions.
4 changes: 1 addition & 3 deletions WebApiClient/HttpActionAttributes/ProxyAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,8 @@ public ProxyAttribute(string host, int port, string userName, string password)
/// <returns></returns>
public override Task BeforeRequestAsync(ApiActionContext context)
{
var client = context.HttpApiConfig.HttpClient;
var proxy = this.CreateProxy();
client.SetProxy(proxy);

context.HttpApiConfig.HttpClient.SetProxy(proxy);
return ApiTask.CompletedTask;
}

Expand Down
4 changes: 2 additions & 2 deletions WebApiClient/IStringFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ public interface IStringFormatter
/// <summary>
/// 将参数值序列化为json/xml文本
/// </summary>
/// <param name="parameter">对象</param>
/// <param name="obj">对象</param>
/// <param name="encoding">编码</param>
/// <returns></returns>
string Serialize(ApiParameterDescriptor parameter, Encoding encoding);
string Serialize(object obj, Encoding encoding);

/// <summary>
/// 将接口回复的内容反序列化对象
Expand Down
38 changes: 31 additions & 7 deletions WebApiClient/Internal/DefaultHttpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,21 +114,21 @@ public bool SetProxy(IWebProxy proxy)
// 设置代理前释放实例并重新初始化
if (this.Handler.Proxy != null)
{
this.ReInitHttpClient();
this.InitHttpClientWithoutProxy();
}

this.Handler.UseProxy = proxy != null;
this.Handler.Proxy = proxy;
this.Handler.Proxy = proxy;
return true;
}

/// <summary>
/// 重新初始化HttpClient实例
/// </summary>
private void ReInitHttpClient()
private void InitHttpClientWithoutProxy()
{
var handler = new DefaultHttpClientHandler();
var httpClient = new HttpClient(handler)
var withoutProxyHandler = ((DefaultHttpClientHandler)this.Handler).CloneWithoutProxy();
var httpClient = new HttpClient(withoutProxyHandler)
{
Timeout = this.Timeout,
MaxResponseContentBufferSize = this.MaxResponseContentBufferSize
Expand All @@ -141,7 +141,7 @@ private void ReInitHttpClient()

this.client.Dispose();
this.client = httpClient;
this.Handler = handler;
this.Handler = withoutProxyHandler;
}


Expand Down Expand Up @@ -250,6 +250,30 @@ protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage reques
}
return base.SendAsync(request, cancellationToken);
}

/// <summary>
/// 无代理克隆
/// </summary>
/// <returns></returns>
public DefaultHttpClientHandler CloneWithoutProxy()
{
return new DefaultHttpClientHandler
{
AllowAutoRedirect = this.AllowAutoRedirect,
AutomaticDecompression = this.AutomaticDecompression,
ClientCertificateOptions = this.ClientCertificateOptions,
ConnectionClose = this.ConnectionClose,
CookieContainer = this.CookieContainer,
Credentials = this.Credentials,
MaxAutomaticRedirections = this.MaxAutomaticRedirections,
MaxRequestContentBufferSize = this.MaxRequestContentBufferSize,
PreAuthenticate = this.PreAuthenticate,
UseProxy = false,
Proxy = null,
UseCookies = this.UseCookies,
UseDefaultCredentials = this.UseDefaultCredentials
};
}
}
}
}
12 changes: 6 additions & 6 deletions WebApiClient/Internal/DefaultJsonFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ class DefaultJsonFormatter : IStringFormatter
/// <summary>
/// 将参数值序列化为json文本
/// </summary>
/// <param name="parameter">对象</param>
/// <param name="obj">对象</param>
/// <param name="encoding">编码</param>
/// <returns></returns>
public string Serialize(ApiParameterDescriptor parameter, Encoding encoding)
public string Serialize(object obj, Encoding encoding)
{
if (parameter.Value == null)
if (obj == null)
{
return null;
}
Expand All @@ -34,14 +34,14 @@ public string Serialize(ApiParameterDescriptor parameter, Encoding encoding)
#if NET45
if (JsonNet.IsSupported == true)
{
return JsonNet.SerializeObject(parameter.Value);
return JsonNet.SerializeObject(obj);
}
return JSON.Serialize(parameter.Value, dateTimeFormate);
return JSON.Serialize(obj, dateTimeFormate);
#endif
#if NETCOREAPP2_0

var setting = new JsonSerializerSettings { DateFormatString = dateTimeFormate };
return JsonConvert.SerializeObject(parameter.Value, setting);
return JsonConvert.SerializeObject(obj, setting);
#endif
}

Expand Down
10 changes: 5 additions & 5 deletions WebApiClient/Internal/DefaultXmlFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,21 @@ class DefaultXmlFormatter : IStringFormatter
/// <summary>
/// 将参数值序列化为xml文本
/// </summary>
/// <param name="parameter">对象</param>
/// <param name="obj">对象</param>
/// <param name="encoding">编码</param>
/// <returns></returns>
public string Serialize(ApiParameterDescriptor parameter, Encoding encoding)
public string Serialize(object obj, Encoding encoding)
{
if (parameter.Value == null)
if (obj == null)
{
return null;
}

var xmlSerializer = new XmlSerializer(parameter.Value.GetType());
var xmlSerializer = new XmlSerializer(obj.GetType());
using (var stream = new MemoryStream())
{
var xmlWriter = new XmlTextWriter(stream, encoding);
xmlSerializer.Serialize(xmlWriter, parameter.Value);
xmlSerializer.Serialize(xmlWriter, obj);
return encoding.GetString(stream.ToArray());
}
}
Expand Down
2 changes: 1 addition & 1 deletion WebApiClient/ParameterAttributes/JsonContentAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ private JsonContentAttribute(Encoding encoding)
protected override void SetHttpContent(ApiActionContext context, ApiParameterDescriptor parameter)
{
var formatter = context.HttpApiConfig.JsonFormatter;
var content = formatter.Serialize(parameter, this.encoding);
var content = formatter.Serialize(parameter.Value, this.encoding);
context.RequestMessage.Content = new StringContent(content, this.encoding, "application/json");
}
}
Expand Down
2 changes: 1 addition & 1 deletion WebApiClient/ParameterAttributes/XmlContentAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ private XmlContentAttribute(Encoding encoding)
protected override void SetHttpContent(ApiActionContext context, ApiParameterDescriptor parameter)
{
var formatter = context.HttpApiConfig.XmlFormatter;
var content = formatter.Serialize(parameter, this.encoding);
var content = formatter.Serialize(parameter.Value, this.encoding);
context.RequestMessage.Content = new StringContent(content, this.encoding, "application/xml");
}
}
Expand Down

0 comments on commit 371a166

Please sign in to comment.