C#关于HttpClient的统一配置(一)
public class BaseHttpClient
{
protected string contentType; public BaseHttpClient()
{
this.contentType = "application/json";
} protected const int RESPONSE_OK = ;
//设置读取超时时间
private const int DEFAULT_SOCKET_TIMEOUT = ( * ); // milliseconds /// <summary>
/// HTTP 验证
/// </summary>
/// <returns></returns>
public virtual Dictionary<string, string> Authorization()
{
return null;
} /// <summary>
/// 构建请求参数
/// </summary>
/// <param name="dicList"></param>
/// <returns></returns>
public String BuildQueryStr(Dictionary<String, String> dicList)
{
String postStr = dicList.Aggregate("", (current, item) => current + item.Key + "=" + HttpUtility.UrlEncode(item.Value, Encoding.UTF8) + "&"); postStr = postStr.Substring(, postStr.LastIndexOf('&'));
return postStr;
} /// <summary>
/// 发送请求
/// </summary>
/// <param name="method">请求方式</param>
/// <param name="url">请求链接</param>
/// <param name="reqParams">请求参数</param>
/// <returns></returns>
public ResultDTO SendRequest(Method method, String url, String reqParams)
{
HttpWebRequest myReq = null;
HttpWebResponse response = null;
try
{
if (method == Method.Get||method==Method.Delete)
{
url += "?" + reqParams;
}
myReq = (HttpWebRequest) WebRequest.Create(url);
myReq.Method = method.ToString();
myReq.ReadWriteTimeout = DEFAULT_SOCKET_TIMEOUT;
myReq.ContentType = contentType; //权限验证
var auth = this.Authorization();
if (auth != null)
{
foreach (var item in auth)
{
myReq.Headers.Add(item.Key, item.Value);
}
} if (myReq.Method == "POST" || myReq.Method == "Put")
{
byte[] bs = Encoding.UTF8.GetBytes(reqParams);
myReq.ContentLength = bs.Length;
using (Stream reqStream = myReq.GetRequestStream())
{
reqStream.Write(bs, , bs.Length);
reqStream.Close();
}
}
response = (HttpWebResponse) myReq.GetResponse();
if (Equals(response.StatusCode, HttpStatusCode.OK) ||
Equals(response.StatusCode, HttpStatusCode.Created))
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
return WebApi.Success(reader.ReadToEnd());
}
}
return WebApi.Error("");
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ProtocolError)
{
//HttpStatusCode errorCode = ((HttpWebResponse) e.Response).StatusCode;
//string statusDescription = ((HttpWebResponse)e.Response).StatusDescription;
using (StreamReader sr = new StreamReader(((HttpWebResponse) e.Response).GetResponseStream(),
Encoding.UTF8))
{
return WebApi.Error(sr.ReadToEnd());
}
}
return WebApi.Error(e.Message);
}
//这里不再抓取非http的异常,如果异常抛出交给开发者自行处理
//catch (System.Exception ex)
//{
// String errorMsg = ex.Message;
// Debug.Print(errorMsg);
//}
finally
{
if (response != null)
{
response.Close();
}
if (myReq != null)
{
myReq.Abort();
}
}
}
} //请求方式
public enum Method
{
Post,
Delete,
Get,
Put
}
C#关于HttpClient的统一配置(一)的更多相关文章
- 基于ZK构建统一配置中心的方案和实践
		
背景: 近期使用Zk实现了一个简单的配置管理的小东西,在此开源出来,有兴趣的希望提出您的宝贵意见.如果恰巧您也使用或者接触过类似的东西, 也希望您可以分享下您觉得现在这个项目可以优化和改进的地方. 项 ...
 - Android 100多个Styles快速开发布局XML,一行搞定View属性,一键统一配置UI...
		
Android开发中大量使用XML代码作为界面的布局,使用styles能大幅精简XML代码. 比如下面这个界面从AlertDialog至PlacePickerWindow有19个样式相同的跳转Item ...
 - JBOSS EAP 6 系列五 Managed domains 管理域最主要的功能是“统一部署,统一配置”
		
摘要 本文首先介绍Managed Domain的概念,管理域最主要的功能是"统一部署,统一配置".接下来通过一个实例在"统一配置"部分实现一个双机配置起来的域, ...
 - .NET Core微服务之基于Apollo实现统一配置中心
		
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.关于统一配置中心与Apollo 在微服务架构环境中,项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改 ...
 - springcloud-spring cloud config统一配置中心
		
统一配置中心 为什么需要统一配置中心? 统一配置中心顾名思义,就是将配置统一管理,配置统一管理的好处是在日后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个 ...
 - 多个SpringMVC项目配置统一管理(来自于springCloud的统一配置思路)
		
因公司项目分多个系统进行开发,而系统架构几乎完全一样,所以同样的配置文件会存在不同的系统中 当其中的某些配置需要修改时,就需要依次把所有系统中相关的配置都修改掉 纯耗时且没技术含量的体力活 所以借鉴S ...
 - 基于Apollo实现.NET Core微服务统一配置(测试环境-单机)
		
一.前言 注:此篇只是为测试环境下的快速入门.后续会给大家带来生产环境下得实战开发. 具体的大家可以去看官方推荐.非常的简单明了.以下介绍引用官方内容: Apollo(阿波罗)是携程框架部门研发的分布 ...
 - Android多个Module统一配置相同jar或库的版本号
		
Android Studio多个Module依赖相同的库时对版本号进行统一配置 在Android项目中,一个项目经常会依赖其他的一个甚至多个库文件,在这种依赖的时候最常见的一个错误就是 jar包版本不 ...
 - 携程框架Apollo实现.NET Core微服务统一配置(测试环境-单机)
		
Apollo实现.NET Core微服务统一配置(测试环境-单机) https://www.cnblogs.com/guolianyu/p/10065999.html 一.前言 注:此篇只是为测试环境 ...
 
随机推荐
- ProgressBar样式总结与自己主动填充方法(代码)
			
有时候开发的时候须要用一个进度条告知用户眼下正在执行一个耗时操作,可是并不须要明白知道某个value来setProgress,所以就能够自己定义一个时间和进度让进度条自己主动执行了. 以下是代码: H ...
 - 【Android进阶】SlidingMenu实现侧滑栏效果的实现
			
public class MainActivity extends Activity { @Override protected void onCreate(final Bundle savedIns ...
 - Java就业前景怎么样?学了后好找工作吗?
			
不知道大家对Java就业前景了解多少.随着信息化的发展.IT培训受倒了越来越多人的追捧.在开发领域,JAVA培训成为了很多人的首选!JAVA应用广泛.JAVA培训就业前景良好. 眼下.尽管JAVA人才 ...
 - 翻译器DIY————次序
			
突然有一种冲动,想要写一个编译器. 因此,检查在网上搜索相关信息,思想direct3D 有本书叫龙,也有个龙书 Compilers Principles,Techniques, & Tool ...
 - mysql出现Data truncated for column
			
1.首先叙述,描述你自己的问题. 假设你想把同意为空值的勾去掉.. .恰巧数据库中的数据 processed_f 为空没有值. . . .这时候你对数据表结构做更改的时候就会出现Data trunca ...
 - LeetCode Solutions : Reorder List
			
→-→Ln-1→Ln, reorder it to: L→Ln-2→- You must do this in-place without altering the nodes' values. Fo ...
 - 红帽/CentOS ext4无法格式化大分区  补充ext4格式化方式
			
普通情况下,XFS出现丢数据的情况为海量小文件IO场景.在该场景下,inode占用教大. 通过上文的方式进行格式化,inode数量较小.通过大量測试,能够使用例如以下方法提升mkfs.ext4后文件系 ...
 - web前端知识体系小结(转)
			
1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...
 - Spring Framework 下载链接_现在有空
			
下载链接:http://repo.spring.io/libs-release-local/org/springframework/spring/ 点击打开链接 包括Spring的各个版本号: 3.2 ...
 - SQL于union, EXCEPT 和 INTERSECT用法
			
这三个放在一起是有道理的,因为它们运行两个或两个以上的结果集,而这些结果对例如设置以下限制: 列的数目和所有查询必须是相同的列顺序. 数据类型必须兼容. 而且它们都是处理于多个结果集中有反复数据的 ...