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. C++三种野指针及应对/内存泄露

    C++三种野指针及应对/内存泄露    野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃.         野指针不是NULL指针,是指 ...

  2. C#字典 Dictionary<Tkey,Tvalue> 之线程安全问题 ConcurrentDictionary<Tkey,Tvalue> 多线程字典

    ConcurrentDictionary<Tkey,Tvalue>  Model #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutra ...

  3. ubuntu里面如何以root身份使用图形界面管理文件?

    nautilus 是gnome的文件管理器,但是如果不是root账号下,权限受限,我们可以通过以下方式以root权限使用! 一,快捷键“Ctrl+Alt+t”,调出shell. 二,在shell中输入 ...

  4. python字符串的切片

    # 字符串的切片 """ (5)字符串的切片 :切片就是截取字符串的意思 (1)语法 =>字符串[::] 完整格式:[开始索引:结束索引:间隔值 (2)[:结束索引 ...

  5. “全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. 基于KMP与Levenshtein模糊匹配算法的银行联行号查询

    在人民银行那里,每个银行的每一个营业网点都有自己唯一的银行联行号,根据这个号码能快速定位一间银行具体的分支行,就像根据一个身份证号码能快速确定一个人一样.例如汇款时,汇款单上要求填写收款人开户行,然后 ...

  7. 10分钟教你用VS2017将代码上传到GitHub

    前言 关于微软的Visual Studio系列,真可谓是宇宙最强IDE了.不过,像小编这样的菜鸟级别也用不到几个功能.今天给大家介绍一个比较实用的功能吧,把Visual Studio 2017里面写好 ...

  8. BUAA_OO_homworkone包含三角函数的多项式求导

    第一次作业 基于x的简单多项式相加求导 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16>.19260817等. 幂函数 一般形式 由自变量x和指数组成,指数为一个带符号整数 ...

  9. Codeforces - 331B2 权值线段树 区间合并

    题意:题目太玄了我无法用语言精简.. 题目要求的操作1是基于值的,所以用普通线段树基本无法维护(反正我不知道) 换做权值型后十分好做,因为连接处必然是更后面的,这时比较一下位置就好 PS.感觉周赛越来 ...

  10. 基于vue-cli li列表的显示隐藏

    效果:点击“公告标题”,显示公告内容,点击同一个“公告标题”多次,显示与隐藏切换 方法一: html部分代码: <ul class="clist"> <li v- ...