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 一.前言 注:此篇只是为测试环境 ...
随机推荐
- 微信电脑版(Mac和Windows)安装
内容简介 1.微信Windows版 2.微信Mac版 3.总结优势 微信电脑版 众所周知,腾讯公司(马化腾先生执掌的巨头公司)开发的超成功App:微信.一经推出便引发业界轰动,使用人数更是直逼QQ. ...
- spring mvc 错误摘要--。位。
1....identifier of an instance of org.szgzw.ent.profile.baseinfo.enterprise.EnterpriseEntity was alt ...
- 新秀系列C/C++经典问题(六)
类包含一个指向成员复制 称号:下面是类和执行的阵列的声明.题.并针对存在的问题提出几种解决方式. template<typename T> class Array { public: Ar ...
- hdu 5074 相邻的和最大dp
http://acm.hdu.edu.cn/showproblem.php?pid=5074 给定一个序列 有些位数未知,给你全部两个数连续所得到的能量.问你怎么安排数字使得总能量最大 二维dp,dp ...
- c# winform 中的 工具栏自动隐藏 splitter用法 带源码
c# winform 中的 工具栏自动隐藏 splitter用法 带源码 代码下载地址 http://download.csdn.net/detail/simadi/7649313
- 电商指尖---(6)solrconfig.xml配置具体解释
solrconfig.xml配置文件主要定义SOLR理规则,包含索引数据的存放位置,更新,删除,查询的一些规则配置. 能够在tomcat的安装路径下找到这个文件C:\Program Files\Apa ...
- BZOJ 2435 NOI2011 道路建设 BFS/DFS
标题效果:给定一个树(直接将树.不要贪图生成树图!).寻找每条边权值*分差的两侧之间 BFS水必须是能 竟DFS能够住...系统堆栈可能有些不够,我们可以使用内联汇编手册中大型系统堆栈 详见代码 这个 ...
- MysqL的root用户不允许远程连接
原文:MysqL的root用户不允许远程连接 今天程序报了异常:java.sql.SQLException: Access denied for user 'root'@'RJB-Z' (using ...
- 【剑指offer】打印1到最大的n数字
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25562105 剑指offer第12题.九度OJ測试通过. 题目描写叙述: 给定一个数字N, ...
- 美工与程序猿的Web工作怎样做到相对分离?
公司某老系统使用的是asp,大量的asp脚本夹在页面中.改个小样式美工就得拉着程序猿,严重占用资源.使用java比較好解决,freemarker之类的模板语言,整个宏传參就能够做到相对分离.asp的还 ...