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# 设置textedit只能输入英文数字下划线,并且只能以英文开头(正则表达式)

    this.textEdit1.Properties.Mask.EditMask = @"[a-zA-z][a-zA-Z0-9_]*";

  2. Webbench的使用

    Webbench是一个在linux下使用的非常简单的网站压测工具. 它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力 ...

  3. [HNOI2010] 合唱队

    题目链接:https://www.luogu.org/problemnew/show/P3205 一个区间DP的题目. 设计状态为:\(dp1[i][j]\)表示当前区间为\([i,j]\),而且最后 ...

  4. ItemContainerStyleSelector

    ItemContainerStyleSelector是容器Style选择器 用法和ItemTemplateSelector差不多 同样也是也是继承类 StyleSelector,也是重写方法Selec ...

  5. Mysql内置功能《三》视图

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  6. PHP中implode()和explode()

    1, implode()函数返回由数组元素组合成的字符串,函数语法:string implode(separator,array),separator参数可选,规定数组元素之间放置的内容,默认是空字符 ...

  7. svn提交新文件夹同时不需要更新全部上级目录

    关于svn的指定目录指定位置更新:当在提交了新建的目录后可以使用 a)  在需要更新的上级目录上单击右键 在延伸菜单中选择 b)  弹出对话框中选择,check repository c)  新添加的 ...

  8. UItextInput-Protocol

    UItextInput是一个protocol,一般来说,文字处理的控件都要遵守这个协议.如UITextField,UITextView.下面介绍一些文字处理的基本概念. marked text 对于多 ...

  9. 本地搭建GitLab

    现在很多企业都开始使用gitLab,因为他的权限管理强大,后台项目管理也很方便.下面就介绍本地搭建方法: 为避免损失,建议在虚拟机测试.虚拟机最低配置(内存2G,cpu:2核,硬盘:20G) 1.安装 ...

  10. 几个常见用于解决nginx负载均衡的session共享问题的办法

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享: PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果sessio ...