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. Ubuntu docker安装、验证、卸载

    卸载Docker CE 卸载Docker CE软件包: sudo apt-get purge docker-ce 主机上的图像,容器,卷或自定义配置文件不会自动删除.要删除所有图像,容器和卷: sud ...

  2. seqsever 查询多个表的条数,并以列的形式展现

    select sum(a) a,sum(b) b,sum(c) c,SUM(d) d,sum(a1) a1,sum(b1) b1,sum(c1) c1,SUM(d1) d1 from( select ...

  3. JavaSE——String

    String类概述 String 类代表字符串,Java 程序中的所有字符串文字(例如"abc")都被实现为此类的实例.也就是说,Java 程序中所有的双引号字符串,都是 Stri ...

  4. 记一次修改vg name 引发的血案

    项目服务器安装完操作系统后,由于vg name 与转维标准不一致,故修改了vg name,那么案件由此发生 1.安装完系统后 /etc/fstab 默认为 2.修改vg name 和 lv name ...

  5. kubeSphere v3.3.0+kubernetes v1.22.10 集群部署

    概述 KubeSphere 是 GitHub 上的一个开源项目,是成千上万名社区用户的聚集地.很多用户都在使用 KubeSphere 运行工作负载.对于在 Linux 上的安装,KubeSphere ...

  6. react框架-知识点(ref,, setState)

    react的思想:无必要勿增实体 1. ref 使用 myRef = React.createRef() <input ref={this.myRef}></input> 2. ...

  7. VS2015+QT5.10项目中文乱码

    解决:文件-高级保存选项,选择utf-8编码.

  8. [Notes-DS-1]时间复杂度的几个概念和计算方法

    ..加点字才算原创?

  9. java判断上传图片格式

    由于客户上传图片将png的图片的后缀名改为jpg,所以通过后缀名判断不行,用下面这个方法可以 //判断是否是JPG格式 log.info("-1----进入JPG格式判断....." ...

  10. 在Windows上安装torch遇到的部分问题

    1.版本问题 老师新买的这台机器是RTX 3060,没动显卡驱动,直接安装的CUDA,装的11.4,完全按照这篇blog来的,非常舒服:https://blog.csdn.net/qq_4504187 ...