C# 应用 - 使用 HttpWebRequest 发起 Http 请求
- helper 类封装
- 调用
1. 引用的库类
\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll
System.Net.HttpWebRequest
2代码 helper 类封装
/// <summary>
/// REST帮助类
/// </summary>
public class RESTHelper
{
/// <summary>
/// 不含请求参数的URL
/// </summary>
public string EndPoint { get; set; }
/// <summary>
/// 请求动作
/// </summary>
public HttpVerb Method { get; set; }
/// <summary>
/// 请求格式(application/json,text/xml,application/x-www-form-urlencoded,multipart/form-data)
/// </summary>
public string ContentType { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="endpoint">路径</param>
/// <param name="method">请求动作</param>
public RESTHelper(string endpoint, HttpVerb method)
{
EndPoint = endpoint;
Method = method;
ContentType = "application/json";
}
/// <summary>
/// 将对象转换为json格式然后命令,一般是使用post请求
/// </summary>
/// <param name="jsonmodel">参数对象,不能传入string类型</param>
/// <param name="encode">字符编码,可为null</param>
/// <returns></returns>
public string MakeJsonPostRequest(object jsonmodel, Encoding encode = null, WebHeaderCollection headerCollection = null)
{
string postData = "";
if (jsonmodel != null)
{
//将对象序列化为json字符串,忽略null值
postData = JsonConvert.SerializeObject(jsonmodel, new Newtonsoft.Json.JsonSerializerSettings { NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" });
}
return MakeRequest("", postData, encode, headerCollection);
}
/// <summary>
/// 发送请求,包含url的参数和请求数据
/// </summary>
/// <param name="parameters">请求参数,如page=1&page_size=20</param>
/// <param name="postData">请求数据</param>
/// <param name="encode">字符编码,可为null</param>
/// <returns></returns>
public string MakeRequest(string parameters, string postData, Encoding encode = null, WebHeaderCollection headerCollection = null)
{
// endpoint与请求参数拼接成完整的请求url
string requesturlstring = EndPoint + (string.IsNullOrEmpty(parameters) ? "" : "?" + parameters);
// 请求前记录日志
DateTime dt = DateTime.Now;
if (WriteLog.LoggerInstance.IsDebugEnabled) WriteLog.WriteLogger.Debug("[REST请求] 请求时间:" + dt.ToString("mm:ss.fff") + "\r\nURI:" + requesturlstring + "\r\n发送请求:" + postData);
// 初始化http请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requesturlstring);
if (headerCollection != null)
request.Headers = headerCollection;
request.Method = Method.ToString();
request.ContentLength = 0;
request.ContentType = ContentType;
request.Timeout = ConfigInfo.RESTTimeOut;
//request.Credentials = new NetworkCredential("username", "password");//传入验证信息
// 编码格式
encode = encode == null ? Encoding.UTF8 : encode;
// POST时,向流写入postData数据
if (!string.IsNullOrEmpty(postData) && Method == HttpVerb.POST)
{
var bytes = encode.GetBytes(postData);
// 设置请求数据的长度
request.ContentLength = bytes.Length;
using (var writeStream = request.GetRequestStream())
{
writeStream.Write(bytes, 0, bytes.Length);
}
}
// 返回值
var responseValue = string.Empty;
// 获取返回值
using (var response = (HttpWebResponse)request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var reader = new StreamReader(responseStream, encode))
{
responseValue = reader.ReadToEnd();
// 记录返回结果日志
if (WriteLog.LoggerInstance.IsDebugEnabled) WriteLog.WriteLogger.Debug("[REST结果] 请求时间:" + dt.ToString("mm:ss.fff") + "\r\nURI:" + requesturlstring + "\r\n返回数据:" + responseValue);
return responseValue;
}
}
}
}
/// <summary>
/// 将json字符串转换为对象(使用DataContractJsonSerializer)
/// </summary>
/// <param name="response"></param>
/// <param name="dateformatstring">时间格式</param>
/// <returns></returns>
public T ConvertJson<T>(string response)
{
try
{
DataContractJsonSerializer Serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(response)))
{
return (T)Serializer.ReadObject(stream);
}
}
catch (Exception ex)
{
WriteLog.WriteLogger.Error("将json字符串转换为对象出错!\r\njson为:" + response, ex);
return default(T);
}
}
/// <summary>
/// 将json字符串转换为对象(使用Json.net)
/// </summary>
/// <param name="response"></param>
/// <param name="dateformatstring">时间格式</param>
/// <returns></returns>
public T JsonNetConvertJson<T>(string response)
{
try
{
JsonSerializerSettings jsSetting = new JsonSerializerSettings();
jsSetting.NullValueHandling = NullValueHandling.Ignore;
return JsonConvert.DeserializeObject<T>(response, jsSetting);
//return JsonConvert.DeserializeObject<T>(response);
}
catch (Exception ex)
{
Common.WriteLog.Error("将json字符串转换为对象出错!\r\njson为:" + response, ex);
return default(T);
}
}
}
/// <summary>
/// http请求方法/动作
/// </summary>
public enum HttpVerb
{
GET,
POST,
PUT,
DELETE
}
3. 调用
public class AClass{}
public AClass RequestAClass(string id)
{
AClass entity = null;
try
{
var uri = ConfigInfo.GetRestUri("GetAClassInfo");
// 参数校验
if (string.IsNullOrEmpty(id))
return null;
var restHelper = new RESTHelper(uri.Uri, HttpVerb.GET);
var jsonString = restHelper.MakeRequest(id);
entity = restHelper.ConvertJson<PrisonerInfoResponseModel>(jsonString);
}
catch (Exception exception) {}
return entity;
}
4. Http 系列
4.1 发起请求
使用 HttpWebRequest 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501036.html
使用 WebClient 发起 Http 请求 :https://www.cnblogs.com/MichaelLoveSna/p/14501582.html
使用 HttpClient 发起 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501592.html
使用 HttpClient 发起上传文件、下载文件请求:https://www.cnblogs.com/MichaelLoveSna/p/14501603.html
4.2 接受请求
使用 HttpListener 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501628.html
使用 WepApp 接受 Http 请求:https://www.cnblogs.com/MichaelLoveSna/p/14501612.html
使用 WepApp 处理文件上传、下载请求:https://www.cnblogs.com/MichaelLoveSna/p/14501616.html
C# 应用 - 使用 HttpWebRequest 发起 Http 请求的更多相关文章
- C# 应用 - 使用 HttpClient 发起 Http 请求
1. 需要的库类 \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll System.N ...
- C# 应用 - 使用 WebClient 发起 Http 请求
1. 需要的库类 \Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll System.Net.WebCli ...
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
原文地址:http://docode.top/Article/Detail/10002 目录: 1.Http协议上传文件(以图片为例)请求报文体内容格式 2.完整版HttpWebRequest模拟上传 ...
- 发起post请求
string postUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo"; //string req ...
- 使用 HttpRequester 更方便的发起 HTTP 请求
使用 HttpRequester 更方便的发起 HTTP 请求 Intro 一直感觉 .net 里面(这里主要说的是 .net framework 下)发送 HTTP 请求的方式用着不是特别好用,而且 ...
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
NET MVC全局异常处理(一) 目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...
- 根据URL发起HTTP请求,我的HTTPHelper。
完整的demo using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- .net 模拟发起HTTP请求(用于上传文件)
用C#在服务端发起http请求,附上代码一 /// <summary> /// 文件帮助类 /// </summary> public class FileHelper { / ...
- C#发起Http请求,调用接口
//方法1. Post 异步请求,普通的异步请求,传输普通的字符串等,对于有html代码的字段值的传输支持不好,如果需要传输html,二进制等数据的传输,请使用下面第二个方法,即使用UploadDat ...
随机推荐
- leetcode 22. 括号生成 dfs
先思考符合要求的串是什么样子的 任意时刻,(数量大于),且最后(==)==n即可 考虑下一个加入string的字符时(或者)即可 dfs class Solution { public: vector ...
- QXDM和QCAT软件使用指南
一.传送门 链接:https://pan.baidu.com/s/1i55YXnf 密码:v6nw 二.QXDM,QPST和QCAT的简单说明 QXDM,QPST和QCAT是Qualcomm高通公司针 ...
- 如何实现一个简易版的 Spring - 如何实现 @Component 注解
前言 前面两篇文章(如何实现一个简易版的 Spring - 如何实现 Setter 注入.如何实现一个简易版的 Spring - 如何实现 Constructor 注入)介绍的都是基于 XML 配置文 ...
- 力扣561. 数组拆分 I-C语言实现-简单题
题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...
- asp.net 从Excel表导入数据到数据库中
http://www.cnblogs.com/hfzsjz/archive/2010/12/31/1922901.html http://hi.baidu.com/ctguyg/item/ebc857 ...
- 最新 uni-app 免费教程
最新 uni-app 免费教程 uni-app 快速入门 steps 建议第一步,看完uni-app官网的首页介绍. 建议第二步,通过快速上手,亲身体验下uni-app. 建议第三步,看完<un ...
- jest ignore
jest ignore modulePathIgnorePatterns https://jestjs.io/docs/en/configuration modulePathIgnorePattern ...
- node.js & ORM & ODM
node.js & ORM & ODM ODM & NoSQL Object Data Modeling 对象数据模型 Object Document Mapping 对象文档 ...
- React Hooks & react forwardRef hooks & useReducer
React Hooks & react forwardref hooks & useReducer react how to call child component method i ...
- nasm astrspn函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...