1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.IO;
  7. using System.Web;
  8. namespace WebAPIClientDemo
  9. {
  10. public class RestClient
  11. {
  12. private string BaseUri;
  13. public RestClient(string baseUri)
  14. {
  15. this.BaseUri = baseUri;
  16. }
  17.  
  18. #region Delete方式
  19. public string Delete(string data, string uri)
  20. {
  21. return CommonHttpRequest(data, uri, "DELETE");
  22. }
  23.  
  24. public string Delete(string uri)
  25. {
  26. //Web访问对象64
  27. string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
  28. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
  29. myRequest.Method = "DELETE";
  30. // 获得接口返回值68
  31. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  32. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  33. //string ReturnXml = HttpUtility.UrlDecode(reader.ReadToEnd());
  34. string ReturnXml = reader.ReadToEnd();
  35. reader.Close();
  36. myResponse.Close();
  37. return ReturnXml;
  38. }
  39. #endregion
  40.  
  41. #region Put方式
  42. public string Put(string data, string uri)
  43. {
  44. return CommonHttpRequest(data, uri, "PUT");
  45. }
  46. #endregion
  47.  
  48. #region POST方式实现
  49.  
  50. public string Post(string data, string uri)
  51. {
  52. return CommonHttpRequest(data,uri,"POST");
  53. }
  54.  
  55. public string CommonHttpRequest(string data, string uri,string type)
  56. {
  57. //Web访问对象,构造请求的url地址
  58. string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
  59.  
  60. //构造http请求的对象
  61. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
  62. //转成网络流
  63. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  64. //设置
  65. myRequest.Method = type;
  66. myRequest.ContentLength = buf.Length;
  67. myRequest.ContentType = "application/json";
  68. myRequest.MaximumAutomaticRedirections = ;
  69. myRequest.AllowAutoRedirect = true;
  70. // 发送请求
  71. Stream newStream = myRequest.GetRequestStream();
  72. newStream.Write(buf, , buf.Length);
  73. newStream.Close();
  74. // 获得接口返回值
  75. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  76. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  77. string ReturnXml = reader.ReadToEnd();
  78. reader.Close();
  79. myResponse.Close();
  80. return ReturnXml;
  81. }
  82. #endregion
  83.  
  84. #region GET方式实现
  85. public string Get(string uri)
  86. {
  87. //Web访问对象64
  88. string serviceUrl = string.Format("{0}/{1}", this.BaseUri, uri);
  89.  
  90. //构造一个Web请求的对象
  91. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
  92. // 获得接口返回值68
  93. //获取web请求的响应的内容
  94. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  95.  
  96. //通过响应流构造一个StreamReader
  97. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  98. //string ReturnXml = HttpUtility.UrlDecode(reader.ReadToEnd());
  99. string ReturnXml = reader.ReadToEnd();
  100. reader.Close();
  101. myResponse.Close();
  102. return ReturnXml;
  103. }
  104. #endregion
  105. }
  106. }
  107.  
  108. //调用代码demo
  109. string serviceUrl = "http://localhost:44540/";
  110. RestClient client = new RestClient(serviceUrl);
  111. string data = @"{""UserName"":""1111"",""Age"":123,""Id"":133}";
  112. string uriPost = "api/values/3";
  113. string retPost = client.Put(data, uriPost);

C# 中经常用到的HTTP请求类,已封装get,post,delete,put的更多相关文章

  1. jQuery中ajax的4种常用请求方式

    jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...

  2. struts中的请求数据自动封装

    Struts 2框架会将表单的参数以同名的方式设置给对应Action的属性中.该工作主要是由Parameters拦截器做的.而该拦截器中已经自动的实现了String到基本数据类型之间的转换工作.在st ...

  3. js中ajax如何解决跨域请求

    js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...

  4. iOS实现OAuth2.0中刷新access token并重新请求数据操作

    一.简要概述 OAuth2.0是OAuth协议的下一版本,时常用于移动客户端的开发,是一种比较安全的机制.在OAuth 2.0中,server将发行一个短有效期的access token和长生命期的r ...

  5. (转)通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证

    通过在 Page 指令或 配置节中设置 validateRequest=false 可以禁用请求验证 说明:   请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止.该值可能指示危及应用 ...

  6. EBS 开发中如何动态启用和禁止请求(Current Request)的参数

    EBS 开发中如何动态启用和禁止请求(Current Request)的参数 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 我们可以使用依赖 ...

  7. Spring拦截器中通过request获取到该请求对应Controller中的method对象

    背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...

  8. jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

    http://www.tangshuang.net/2271.html 在上一篇<服务端php解决jquery ajax跨域请求restful api问题及实践>中,我简单介绍了如何通过服 ...

  9. Springboot中使用AOP统一处理Web请求日志

    title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...

随机推荐

  1. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

  2. 【转】最新基于adt-bundle-windows-x86的android开发环境搭建

    http://blog.csdn.net/wangqiuyun/article/details/8731240 某系统要配套做一个android客户端,来一次android开发环境快速搭建,系统Win ...

  3. javascript进击(一)简介

    javascript是属于网络的脚本语言(javascript与java就像老婆与老婆饼,并没有关系) 页面静态效果:HTML+CSS 为页面添加动态效果:javascript JavaScript ...

  4. Qt Quick 简单教程 - 1 (代码备忘)

    qmlscene 未安装 由于出现上面的情况,我开始转战Windows 下学习,昨天安装好了Qt Sdk了,哟吼吼吼. mail.qml内容: import QtQuick 2.3 import Qt ...

  5. 骑士飞行棋 C#代码详解

    最近看见一个骑士飞行棋的小游戏代码,感觉这个代码中将大多数C#的基础知识都运用到了,是一个新手检验学习成果的有效方法,特此将这个代码整理一遍.这是一个控制台程序.这是代码下载地址,代码中的注释非常详细 ...

  6. 企业级应用框架(五)IOC容器在框架中的应用

    前言 在上一篇我大致的介绍了这个系列所涉及到的知识点,在本篇我打算把IOC这一块单独提取出来讲,因为IOC容器在解除框架层与层之间的耦合有着不可磨灭的作用.当然在本系列前面的三篇中我也提供了一种基于反 ...

  7. 如何在已安装vs2010的基础上安装sql2008

    以前老受到别人写的这类东西的帮助,所以这次决定自己试下,第一次发这种,写得不好莫怪.       涉略sql2008一个多星期了.怎么说呢?Transact-SQL的编程虽然不如C++,java等高级 ...

  8. CAS 单点登录,通过ticket 获取登录用户

    string url =SSOValidate+"?service=" + WebValidate + "&ticket=" + Ticket + &q ...

  9. MVC小系列(十二)【RenderAction和RenderPartial区别】

    二者作用:RenderAction:渲染分部视图到页面上,要求提供Action和控制器名称RenderPartial:渲染分部视图到页面上,要求提供分部视图的名称,即路径,如果是在当前控制下或者sha ...

  10. ACM/ICPC ZOJ1003-Crashing Balloon 解题代码

    #include <iostream> using namespace std; int main() { int **array = new int *[100]; for ( int ...