public class RestClientMethod
{
/// <summary>
/// 请求服务器地址
/// </summary>
public string BaseUri; //例如: http://10.0.0.193
public RestClientMethod(string baseUri)
{
this.BaseUri = baseUri;
} /// <summary>
/// Get请求
/// </summary>
/// <param name="uri"></param>
/// <param name="strAuth_token"></param>
/// <returns></returns>
public string Get(string uri, string strAuth_token)
{
string serviceUrl = string.Format("{0}{1}", this.BaseUri, uri); //先根据用户请求的uri构造请求地址
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(serviceUrl); //创建访问对象
myRequest.Headers.Add("Authorization", strAuth_token); //需要auth_token验证时添加,没有可去掉,下同
HttpWebResponse myResponse; //通过访问对象获取响应内容
try
{
myResponse = (HttpWebResponse)myRequest.GetResponse();
}
catch (WebException ex)
{
myResponse = (HttpWebResponse)ex.Response;
Console.WriteLine(ex.Response);
}
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//解决编码问题
string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
//reader提供多种数据转换类型,如reader.ReadAsync可转换为所设定的实体类型
reader.Close();
myResponse.Close();
return returnXml;
} #region Post请求
/// <summary>
/// 登录获取权限POST底层方法
/// </summary>
/// <param name="data">数据参数</param>
/// <param name="uri">API接口path</param>
/// <returns></returns>
public string PostJsonData(string data, string uri, string strAgent)
{
//先根据用户请求的uri构造请求地址
string serviceUrl = string.Format("{0}{1}", this.BaseUri, uri);
//创建Web访问对象
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(serviceUrl);
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data); //数据转成“UTF-8”的字节流 //设置参数的编码格式,解决中文乱码
myRequest.Method = "POST";
myRequest.ContentLength = buf.Length; //设置myRequest的MIME类型及内容长度
if (strAgent != "")
{
myRequest.UserAgent = strAgent;
}
myRequest.ContentType = "application/json";
using (Stream stream = myRequest.GetRequestStream()) //发送请求
{
stream.Write(buf, 0, buf.Length);
stream.Close();
}
using (WebResponse myResponse = (WebResponse)myRequest.GetResponse()) //获取接口返回值 通过Web访问对象获取响应内容
{
using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8)) //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
{
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//解决编码问题
string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
reader.Close();
myResponse.Close();
return returnXml;
}
}
} /// <summary>
/// json格式执行Post方法
/// </summary>
/// <param name="data"></param>
/// <param name="uri"></param>
/// <param name="strtoken"></param>
/// <returns></returns>
public string PostJsonWithAuth(string data, string uri, string strtoken)
{
string serviceUrl = string.Format("{0}{1}", this.BaseUri, uri);
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(serviceUrl);
myRequest.Method = "POST";
myRequest.Headers.Add("Authorization", strtoken);
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
myRequest.ContentLength = buf.Length;
myRequest.ContentType = "application/json";
myRequest.MaximumAutomaticRedirections = 1;
myRequest.AllowAutoRedirect = true;
//发送请求
using (Stream stream = myRequest.GetRequestStream())
{
stream.Write(buf, 0, buf.Length);
stream.Close();
}
using (WebResponse myResponse = (WebResponse)myRequest.GetResponse()) //获取接口返回值 通过Web访问对象获取响应内容
{
using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8)) //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
{
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//解决编码问题
string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
reader.Close();
myResponse.Close();
return returnXml;
}
}
} /// <summary>
/// form-data格式执行Post方法 传图片
/// </summary>
/// <param name="url"></param>
/// <param name="imageInfo"></param>
/// <param name="stringDict"></param>
/// <param name="strAuth_token"></param>
/// <returns></returns>
public string PostFormData(string url, Dictionary<string, string> imageInfo, System.Collections.Specialized.NameValueCollection stringDict, string strAuth_token)
{
string responseContent = "";
try
{
string serviceUrl = string.Format("{0}/{1}", this.BaseUri, url);
var webRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
webRequest.Headers.Add("Authorization", strAuth_token);
var boundary = "---------------" + DateTime.Now.Ticks.ToString("x"); // 边界符
// 设置属性
webRequest.Method = "POST";
webRequest.Timeout = 10000; //默认超时时间为10秒
webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); // 开始边界符
var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); // 最后的结束符
var memStream = new MemoryStream(); //为系统内存提供流式的读写操作
memStream.Write(beginBoundary, 0, beginBoundary.Length); FileStream fileStream = null;
#region 写入文件
if (imageInfo != null)
{
foreach (var item in imageInfo)
{
fileStream = null;
fileStream = new FileStream(item.Value, FileMode.Open, FileAccess.Read);
const string filePartHeader = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + "Content-Type: application/octet-stream\r\n\r\n";
var header = string.Format(filePartHeader, item.Key, item.Value);
var headerbytes = Encoding.UTF8.GetBytes(header);
memStream.Write(headerbytes, 0, headerbytes.Length);
var buffer = new byte[1024];
int bytesRead; // =0
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
}
}
#endregion var contentLine = Encoding.ASCII.GetBytes("\r\n");
memStream.Write(contentLine, 0, contentLine.Length);
// 写入字符串的Key
var stringKeyHeader = "\r\n--" + boundary +
"\r\nContent-Disposition: form-data; name=\"{0}\"" +
"\r\n\r\n{1}\r\n";
if (stringDict != null)
{
foreach (byte[] formitembytes in from string key in stringDict.Keys
select string.Format(stringKeyHeader, key, stringDict[key])
into formitem
select Encoding.UTF8.GetBytes(formitem))
{
memStream.Write(formitembytes, 0, formitembytes.Length);
}
} // 写入最后的结束边界符
memStream.Write(endBoundary, 0, endBoundary.Length);
webRequest.ContentLength = memStream.Length;
var requestStream = webRequest.GetRequestStream();
memStream.Position = 0;
var tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close(); using (var httpWebResponse = (HttpWebResponse)webRequest.GetResponse())
{
using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
Encoding.GetEncoding("utf-8")))
{
responseContent = httpStreamReader.ReadToEnd();
}
if (fileStream != null)
{
fileStream.Close();
}
httpWebResponse.Close();
webRequest.Abort();
}
}
catch (Exception ex)
{
responseContent = ex.ToString();
}
return responseContent;
} #endregion #region Put请求
public string PutWithToken(string uri, string info, string strToken)
{
string serviceUrl = string.Format("{0}{1}", this.BaseUri, uri);
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(serviceUrl); //后台或可使用WebRequest request = WebRequest.Create(url);
myRequest.Headers.Add("Authorization", strToken); //数据转成“UTF-8”的字节流 //设置参数的编码格式,解决中文乱码
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(info);
myRequest.Method = "Put";
myRequest.ContentLength = buf.Length;
myRequest.ContentType = "application/json";
//myRequest.MaximumAutomaticRedirections = 1;
//myRequest.AllowAutoRedirect = true;
//发送请求
using (Stream stream = myRequest.GetRequestStream())
{
stream.Write(buf, 0, buf.Length);
stream.Close();
}
using (WebResponse myResponse = (WebResponse)myRequest.GetResponse()) //获取接口返回值 通过Web访问对象获取响应内容
{
using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8)) //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
{
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//解决编码问题
string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
reader.Close();
myResponse.Close();
return returnXml;
}
}
} #endregion #region Delete请求
public string Delete(string data, string uri, string strServerToken)
{
string serviceUrl = string.Format("{0}{1}", this.BaseUri, uri);
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(serviceUrl);
myRequest.Headers.Add("Authorization", strServerToken);
myRequest.Method = "DELETE";
myRequest.ContentType = "application/x-www-form-urlencoded";
//myRequest.MaximumAutomaticRedirections = 1;
//myRequest.AllowAutoRedirect = true;
if (data != "")
{
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
myRequest.ContentLength = buf.Length;
using (Stream stream = myRequest.GetRequestStream()) //发送请求
{
stream.Write(buf, 0, buf.Length);
stream.Close();
}
}
using (HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse()) //获取接口返回值 通过Web访问对象获取响应内容
{
using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8)) //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
{
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//解决编码问题
string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
reader.Close();
myResponse.Close();
return returnXml;
}
}
} #endregion }

WebAPI :Get、Post、Delete、Put的更多相关文章

  1. Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  2. MySQL数据库(2)- 库的操作、表的操作、数据的操作、存储引擎的介绍

    一.库的操作 1.系统数据库 执行如下命令,查看系统数据库: mysql> show databases; 参数解释: information_schema: 虚拟库,不占用磁盘空间,存储的是数 ...

  3. Mysql基础(一):Mysql初识、基本指令、数据库密码相关、创建用户及授权

    来源:https://www.cnblogs.com/liubing8/p/11432534.html 目录 数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 1. 数据库概述 ...

  4. 数据库01 /Mysql初识、基本指令、数据库密码相关、创建用户及授权

    数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 目录 数据库01 /Mysql初识.基本指令.数据库密码相关.创建用户及授权 1. 数据库概述 2. 数据库管理系统/DBMS ...

  5. [MySQL数据库之数据库相关概念、MySQL下载安装、MySQL软件基本管理、SQL语句]

    [MySQL数据库之数据库相关概念.MySQL下载安装.MySQL软件基本管理.SQL语句] 数据库相关概念 数据库管理软件的由来 数据库管理软件:本质就是个C/S架构的套接字程序. 我们在编写任何程 ...

  6. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  7. 原生JS:delete、in、typeof、instanceof、void详解

    delete.in.typeof.instanceof.void详解 本文参考MDN做的详细整理,方便大家参考[MDN](https://developer.mozilla.org/zh-CN/doc ...

  8. 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等

    今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...

  9. MongoDB入门系列(二):Insert、Update、Delete、Drop

    概述 本章节介绍Insert.Update.Delete.Drop操作基本语法. 环境: Version:3.4 insert insert()基本语法如下: db.collection.insert ...

  10. [转帖]HTTP请求方法:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

    HTTP请求方法:GET.HEAD.POST.PUT.DELETE.CONNECT.OPTIONS.TRACE 说明 平时的Rest开发,用到的都是GET,POST,PUT,DELETE类型的请求. ...

随机推荐

  1. SQLServer错误:expected a simple type, a tuple or a list

    dict_data = { 'request_id': request_id, 'original_id': request_body.original_id, 'unit_type': reques ...

  2. EF和dapper

    EF:重量级ORM的代表 优点: 1.不关心sql怎么写, 2.开发速度快,和linq结合,有效提高开发效率 3.code first,代码优先,不用关心数据库结构,代码先行. 4.跨数据库,只需要把 ...

  3. if语法案例

    if语法案例 1. 判断系统剩余内存 1) 脚本正文 2) 执行结果 2.监控web和数据库的方法 1) 端口监控 2) 进程监控 3) 客户端模拟 4) 数据库判断* 3.mysql数据库检测命令演 ...

  4. mysql函数实现oracle的序列

    1.创建一张伪序列表 CREATE TABLE sequence ( seq_name VARCHAR (50) NOT NULL,-- 序列名称 current_val INT NOT NULL,- ...

  5. leecode70. 爬楼梯

    70. 爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到 ...

  6. Linux中启动Docker容器报错:Error response from daemon: driver failed programming external connectivity

    在启动Docker的容器时,会出现报错:Error response from daemon: driver failed programming external connectivity on e ...

  7. Request processing failed;

    用 ssm 框架修改数据库数据时,出现了 Request processing failed; nested exception is org.mybatis.spring.MyBatisSystem ...

  8. Java基础学习:10、封装和继承和super、方法重载、多态、动态绑定

    封装: 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.意义: 只能通过规定的方法访问数据. 隐藏类的实例细节,方便修改和实现 ...

  9. ISP(图像信号处理)算法概述、工作原理、架构、处理流程

    目录 ISP的主要内部构成: ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构: 1.ISP逻辑 2.运行在其上的firmware ISP上的Firmware ...

  10. Java基础——IO基础知识

    字节流可以处理任何类型的数据(图片.MP3.视频等文件),字符流只能处理字符类型(文本文件)的数据.