public class ServiceHelper
{
private static string _baseUrl = $@"http://{Config.Instance.MesServerUrl}/";
private static string _sessionHeader;
public static void ClearSession()
{
_sessionHeader = "";
}
public static string SessionId; public static string BaseUrl
{
get { return _baseUrl; }
set { _baseUrl = $@"http://{value}/";} //value 包含IP和端口号 + 后台服务名, 如:localhost:8080/DadeMes
} /// <summary>
/// HttpClient实现Get请求
/// <param name="subUrl">子URL前面必须带 "/" 符号</param>
/// </summary>
public static string Get(string subUrl)
{
try
{
using (var client = GetClient())
{
return client.DownloadString(subUrl); }
}
catch (WebException)
{
throw new Exception("无法连接服务器");
}
} /// <summary>
/// Post
/// </summary>
/// <param name="url">子地址</param>
/// <param name="strData">要传输的json字符串</param>
/// <returns></returns>
public static string Post(string url, string strData = "")
{
try
{
using (var client = GetClient())
{
var postData = Encoding.UTF8.GetBytes(strData); //编码,尤其是汉字,事先要看下抓取网页的编码方式
var responseData = client.UploadData(url, "POST", postData); //得到返回字符流
if (string.IsNullOrWhiteSpace(_sessionHeader))
{
_sessionHeader = client.ResponseHeaders["Set-Cookie"];//保存session
}
return Encoding.UTF8.GetString(responseData); //解码
}
}
catch (WebException ex)
{
throw new Exception("无法连接服务器");
}
} /// <summary>
/// 将本地文件上传到服务器
/// </summary>
/// <param name="url">服务器路径</param>
/// <param name="filePath">本地路径</param>
/// <returns>上传成功后返回的是上文件的路径</returns>
public static string UploadFile(string url, string filePath)
{
try
{
using (var client = GetClient())
{
var responseData = client.UploadFile(url, filePath); //得到返回字符流 if (string.IsNullOrWhiteSpace(_sessionHeader))
{
_sessionHeader = client.ResponseHeaders["Set-Cookie"];//保存session
}
return Encoding.UTF8.GetString(responseData); //解码
}
}
catch (WebException ex)
{
throw new Exception("无法连接服务器");
}
} private static WebClient GetClient()
{
return new WebClient
{
//webClient.Headers.Add("Cookie",header);//在给服务器发送消息时加上这个Session值
Headers =
{
[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)",
["DNT"] = "",
//["Content-Type"]="application/x-www-form-urlencoded",
["Content-Type"]="application/json",
["Cookie"]=_sessionHeader,
["x-requested-with"]="XMLHttpRequest",
},
Encoding = Encoding.UTF8,
BaseAddress = BaseUrl
};
}
}

ServiceHelper的更多相关文章

  1. [项目]WebService涉及到的部分核心代码

     前言: 博客园似乎不太喜欢设计模式的东西,一连写了几篇设计模式的东西,都没什么人气,也许是写的水平有些不够,另外设计模式属于内功,怎们都得修炼一下,否则,设计混乱,不成体系,对于大型项目来说,就会显 ...

  2. WebService开发

    一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使   用WebSer ...

  3. 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

    注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带 ...

  4. 动态调用Webservice 支持Soapheader身份验证(转)

    封装的WebserviceHelp类: using System; using System.CodeDom; using System.CodeDom.Compiler; using System. ...

  5. OpenStack集成Docker

    声明:绝对原创,欢迎转载,但请标明出处,谢谢! 最近在做openstack与Docker的集成工作,走了不少弯路,遇到不少问题,不过最终搭建成功了.现在将过程分享出来,以供参考. 一.环境介绍 1.软 ...

  6. Android 与 Webservice 的快速保存

    前面写了一篇android对sqllite的快速保存博客,今天我们来看看android与webservice的交互,相信很多有经验的人自然就想到了soap.但是如果在小型项目中,具有大材小用之嫌.实际 ...

  7. 【原】K3Cloud平台开发之Python插件

    有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单: 功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个 ...

  8. WindowsService服务的C#实现

    WindowsService(简称服务,下同)是目前做客户端软件后台运行功能的非常好的选择,本文基本解决了服务的创建和编写,代码控制服务的安装.卸载.启动.停止等,为服务传递参数,其他注意事项等 1. ...

  9. ios 调用webservice整理

    资料地址:http://blog.sina.com.cn/s/blog_a30ee5f701016yn3.html 学iphone开发有一段时间了,对于我这个新手来说,学习过程中,遇到不少问题,尤其是 ...

随机推荐

  1. 系统禁用执行FIPS政策导致程序发生“调用的目标发生了异常”

    工具是使用AES-256-CBC加密算法 问题 最近有客户反映, 在使用我们工具时候,会出现“调用的目标发生了异常”错误, 接到反馈之后, 我们进行了很多测试,甚至得到客户系统信息和framework ...

  2. 解决:The APR based Apache Tomcat Native library which allows optimal performance in production...

    tomcat日志apr报错引发的基于Tomcat Native加速Tomcat性能 tomact服务启动报错日志如下:息: The APR based Apache Tomcat Native lib ...

  3. bitcoin script

    P2PK P2PKH,MS,P2SH,OP_RETURN 等的区别 1.P2PK pay_to_public_key pubkey script: <pubkey> OP_CHECKSIG ...

  4. Oracle彻底卸载

    Oracle彻底卸载 卸载:oracle卸载1.删除注册表:打开注册表:regedit 打开路径: <找注册表 :开始->运行->regedit> HKEY_LOCAL_MAC ...

  5. occal [问题解决]ORA-01427: 单行子查询返回多个行

    有人问题我一个问题,情况如下:他要用根据divide_act_channel_day的new_amount字段去更新divide_stat的new_amount字段.两张表关联的条件:day=log_ ...

  6. js的事件机制二

    js的事件机制二 1.给合适的HTML标签添加合适的事件 onchange-----select下拉框 onload-----body标签 单双击-----用户会进行点击动作的HTML元素 鼠标事件 ...

  7. NVIDIA Jetson TX2刷机

    官方安装教程 JetPack下载 主机端环境准备 需要在PC端安装虚拟机,虚拟机中安装Ubuntu14.04系统. 按照上面的地址下载JetPack-L4T-3.1-linux-x64.run 主机端 ...

  8. np.random.normal()

    高斯分布(Gaussian Distribution)的概率密度函数(probability density function): \[ f(x)=\frac1{\sqrt{2\pi}\sigma}\ ...

  9. Ubuntu14.04安装libusb

    https://www.cnblogs.com/ettie999/p/8142973.html libuvc是一个跨平台的USB视频设备库,建立在libusb之上. 它能够对导出标准USB视频类(UV ...

  10. JavaWeb学习笔记(十八)—— DBUtils的使用

    一.DBUtils概述 1.1 什么是DBUtils commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbuti ...