1.通用方法

public class GetDataByWebApi
{
/// <summary>
/// 通过web api获取数据的方法
/// </summary>
/// <param name="url">api的url</param>
/// <param name="method">请求类型,默认是get</param>
/// <param name="postData">post请求所携带的数据</param>
/// <returns></returns>
public static string RequestData(string url, string method = "Get", string postData = null)
{
try
{
method = method.ToUpper();
//设置安全通信协议 我方公司服务器有些强制使用tls1.2的安全通信协议,所以至少包含SecurityProtocolType.Tls12 如果沒有SecurityProtocolType.Tls12设置会报错:HttpWebRequest底层连接已关闭:传送时发生意外错误
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls |
SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; //创建请求实例
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //设置请求类型
request.Method = method;
//设置请求消息主体的编码方法
request.ContentType = "application/json"; //POST方式處理
if (method == "POST")
{
//test t = test.T;
//t.gaga("哟西"); //用UTF8字符集对post请求携带的数据进行编码,可防止中文乱码
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
//指定客户端post请求携带的数据的长度
request.ContentLength = byteArray.Length; //创建一个tream,用于写入post请求所携带的数据(该数据写入了请求体)
Stream stream = request.GetRequestStream();
stream.Write(byteArray, 0, byteArray.Length);
stream.Close();
} //获取请求的响应实例
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//获取读取流实体,用来以UTF8字符集读取响应流中的数据
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), /*Encoding.UTF8*/Encoding.Default);
//进行数据读取
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
return retString;
}
catch (Exception ex)
{
//拋出異常
//throw ex;
return ex.Message;
}
}
}

注:需要引用Newtonsoft.Json.dll下的Newtonsoft.Json;

2.模拟发送自定义类数据

(1)自定义类

/// <summary>
/// 请求参数
/// </summary>
public class ASK
{
/// <summary>
/// 自定义数据体
/// </summary>
public Dictionary<object, object> data { get; set; }
/// <summary>
/// 功能名
/// </summary>
public string fun { get; set; }
/// <summary>
/// 消息id,服务端接收后会原样返回,websocket连接可用用来异步转同步用。http模式直接填0
/// </summary>
public string msgid { get; set; } public ASK(Dictionary<object, object> data, string fun, string msgid)
{
this.data = data;
this.fun = fun;
this.msgid = msgid;
} public ASK()
{ }
}

(2)模拟发送

/// <summary>
/// http请求方式调用web api
/// </summary>
/// <param name="ask">请求参数</param>
/// <returns>返回调用结果</returns>
public string HttpApi(ASK ask)
{
if (ask != null)
{
string jsonstr = JsonConvert.SerializeObject(ask);
string result = GetDataByWebApi.RequestData("http://127.0.0.1:9912/api", "POST", jsonstr);
return result;
}
else { return ""; }
} public void PostSend()
{
ASK D = new ASK() { data = new Dictionary<object, object>(), fun = "get_device_list", msgid = "0" };
string jsonstr = JsonConvert.SerializeObject(D);
string result = GetDataByWebApi.RequestData("http://127.0.0.1:9912/api", "POST", jsonstr);//post方式发送
  //string result = GetDataByWebApi.RequestData("http://127.0.0.1:9912/api?fun=get_device_list");//Get方式发送
MessageBox.Show(result);
}

C# 调用Web Api通用方法的更多相关文章

  1. WebApi系列~通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  2. 通过HttpClient来调用Web Api接口

    回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...

  3. ASP.NET MVC4中调用WEB API的四个方法

    http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各 ...

  4. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  5. React Native教程 - 调用Web API

    react-native官网Fetch介绍:https://facebook.github.io/react-native/docs/network.html#content react-native ...

  6. 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)

    原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  7. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

    原文:[ASP.NET Web API教程]3.3 通过WPF应用程序调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  8. 使用HttpClient 调用Web Api

    C#4.5 添加了异步调用Web Api . 如果你的项目是4.5以上版本,可以直接参考官方文档. http://www.asp.net/web-api/overview/web-api-client ...

  9. [置顶] Xamarin android 调用Web Api(ListView使用远程数据)

    xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

  10. Xamarin.Android 调用Web Api(通过ListView展示远程获取的数据)

    xamarin.android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin.android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...

随机推荐

  1. VUEX 使用学习五 : getter

    转载请注明出处: Getter对Store中的数据进行加工处理形成新的数据.他不会修改state中的原始数据,起到的是包装数据的作用: 有时我们需要从 store 中的 state 中派生出一些状态, ...

  2. MRS_下载相关问题汇总

    解决问题如下: MRS下载编译时,更改生成文件是HEX文件还是BIN文件 关于MounRiver下载时如何选择配置部分擦除 关于MounRiver下载起始地址配置问题 MRS下载编译时,更改生成文件是 ...

  3. 0源码基础学习Spring源码系列(一)——Bean注入流程

    作者:京东科技 韩国凯 通过本文,读者可以0源码基础的初步学习spring源码,并能够举一反三从此进入源码世界的大米! 由于是第一次阅读源码,文章之中难免存在一些问题,还望包涵指正! 一. @Auto ...

  4. HEU_KMS_Activator_v27.0.2全能系统数字许可激活工具

    HEU_KMS_Activator_v27.0.2全能系统数字许可激活工具 HEU KMS Activator是KMS激活工具,支持激活 Windows XP.Windows 7.Windows 8. ...

  5. 线程私有变量ThreadLocal详解

    本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 烈火试真金,逆境试强者.--塞内加 目录 什么是ThreadLocal ThreadLo ...

  6. 郁金香 用C写一个定时器来循环获取阳光

    先来张效果图 定时器代码   HWND 游戏窗口句柄 = FindWindowA("MainWindow", "植物大战僵尸中文版"); ::SetTimer( ...

  7. Redis 源码解读之逐出策略

    Redis 源码解读之逐出策略 背景和问题 本文想解决的问题: redis 触发逐出的时机是怎样的? redis 逐出策略有哪些? 如何在海量的 key 中快速找到逐出评价值(idle)最高的key, ...

  8. php .inc 文件

    inc 文件顾名思义是include file的意思.即PHP的包含文件,这里用后缀来表示文件的作用, inc文件一般加载一些设置 举个例子   <? php//这里是数据库连接的配置信息db. ...

  9. 代码随想录算法训练营day08 | leetcode 344.反转字符串/541. 反转字符串II / 剑指Offer05.替换空格/151.翻转字符串里的单词/剑指Offer58-II.左旋转字符串

    基础知识 // String -> char[] char[] string=s.toCharArray(); // char[] -> String String.valueOf(str ...

  10. 【论文笔记】UNet

    语义分割的U-Net网络结构Unet是2015年诞生的模型,它几乎是当前segmentation项目中应用最广的模型.Unet能从更少的训练图像中进行学习,当它在少于40张图的生物医学数据集上训练时, ...