利用HttpWebRequest访问WebApi
WebApi现在越来越流行,下面给出利用HttpWebRequest访问WebApi的工具方法:
1、利用基准URL和参数字典生成完整URL
/// <summary>
/// 生成URL字符串
/// </summary>
/// <param name="baseUrl">基准URL</param>
/// <param name="dictParam">参数字典</param>
/// <returns>最终URL字符串</returns>
public static string GetUrl(string baseUrl, Dictionary<string, string> dictParam)
{
if (string.IsNullOrWhiteSpace(baseUrl))
{
throw new ArgumentNullException("baseUrl", "基准URL不能为空");
}
StringBuilder sbParam = new StringBuilder();
string strParam = string.Empty;
if (dictParam != null && dictParam.Count > 0)
{
sbParam.Append("?");
foreach (KeyValuePair<string, string> item in dictParam)
{
sbParam.Append(string.Format("{0}={1}&", item.Key, HttpUtility.UrlEncode(item.Value, Encoding.UTF8)));
}
strParam = sbParam.ToString();
strParam = strParam.Substring(0, strParam.Length - 1);
}
string strUrl = string.Format("{0}{1}", baseUrl, strParam);
return strUrl;
}
2、通过HTTP请求获取数据(参数为非model类型)
/// <summary>
/// 通过http请求获取数据(参数为非model类型)
/// </summary>
/// <param name="url">获取数据的url</param>
/// <param name="requestMethod">请求方法:GET/POST/PUT/DELETE</param>
/// <param name="jsonData">返回的json数据</param>
/// <param name="errMsg">错误信息</param>
/// <returns>true:成功 false:失败</returns>
public static bool RequestHttpData(string url, string requestMethod, out string jsonData, out string errMsg)
{
jsonData = string.Empty;
errMsg = string.Empty;
string result = string.Empty;
try
{
//创建请求
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = 15 * 60 * 1000; //15分钟
request.Method = requestMethod;
request.KeepAlive = true;
request.AllowAutoRedirect = false;
//获取数据
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader sr = new StreamReader(response.GetResponseStream());
result = sr.ReadToEnd();
}
}
catch (WebException ex)
{
try
{
WebResponse wr = ex.Response;
Stream st = wr.GetResponseStream();
StreamReader sr = new StreamReader(st, System.Text.Encoding.Default);
string tmpErr = sr.ReadToEnd();
Regex r = new Regex(@"\<body\>\<h1\>.*\</h1\>");
errMsg = r.Match(tmpErr).Value.Replace("<body><h1>", "").Replace("</h1>", "");
sr.Close();
st.Close();
}
catch
{
errMsg = ex.Message;
}
return false;
}
catch (Exception ex)
{
errMsg = ex.Message;
return false;
}
if (!string.IsNullOrWhiteSpace(result))
{
jsonData = result;
}
return true;
}
3、通过HTTP请求获取数据(参数为model类型)
/// <summary>
/// 通过http请求传递数据(参数为model类型)
/// </summary>
/// <param name="url">传递数据的url</param>
/// <param name="paraJson">要传递的Json数据</param>
/// <param name="requestMethod">请求方法:GET/POST/PUT/DELETE</param>
/// <param name="jsonData">返回的json数据</param>
/// <param name="errMsg">错误信息</param>
/// <returns>true:成功 false:失败</returns>
public static bool RequestHttpData(string url, string paraJson, string requestMethod, out string jsonData, out string errMsg)
{
jsonData = string.Empty;
errMsg = string.Empty;
string result = string.Empty;
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = 15 * 60 * 1000; //15分钟
request.Method = requestMethod;
request.KeepAlive = true;
request.AllowAutoRedirect = false;
request.ContentType = "application/json";
byte[] postdatabtyes = Encoding.UTF8.GetBytes(paraJson);
request.ContentLength = postdatabtyes.Length;
Stream requeststream = request.GetRequestStream();
requeststream.Write(postdatabtyes, 0, postdatabtyes.Length);
requeststream.Close();
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd();
} }
catch (WebException ex)
{
try
{
WebResponse wr = ex.Response;
Stream st = wr.GetResponseStream();
StreamReader sr = new StreamReader(st, System.Text.Encoding.Default);
string tmpErr = sr.ReadToEnd();
Regex r = new Regex(@"\<body\>\<h1\>.*\</h1\>");
errMsg = r.Match(tmpErr).Value.Replace("<body><h1>", "").Replace("</h1>", "");
sr.Close();
st.Close();
}
catch
{
errMsg = ex.Message;
}
return false;
}
catch (Exception ex)
{
errMsg = ex.Message;
return false;
}
if (!string.IsNullOrWhiteSpace(result))
{
jsonData = result;
}
return true;
}
利用HttpWebRequest访问WebApi的更多相关文章
- 十二、.net core(.NET 6)添加通用的访问webapi的方法(包括HttpClient和HttpWebRequest)
开发通用的访问webapi方法. 在common工具文件夹下,新建一个类库项目:Wsk.Core.WebHelper,并引用Package包项目,然后新建一个类HttpClientHelper,用于使 ...
- 利用HttpWebRequest实现实体对象的上传
一 简介 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对 ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
- HttpWebRequest访问时,错误:(401)未经授权。
HttpWebRequest访问时,错误:(401)未经授权. 某网页,我不想做登录界面,直接使用域的帐号密码来访问.如果网站设置成Window身份验证,单独的页面都没问题,而是通过使用HttpWeb ...
- c#利用HttpWebRequest获取网页源代码
c#利用HttpWebRequest获取网页源代码,搞了好几天终于解决了,直接获取网站编码进行数据读取,再也不用担心乱码了! 命名空间:Using System.Net private static ...
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
- 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录
利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录 tring cookie = response.Headers.Get("Set-Cookie ...
- 利用JavaAPI访问HDFS的文件
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
随机推荐
- requestDisallowInterceptTouchEvent
ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的可水平滑动的控件,却导致tab切换. 因为Android事件机制是从父 ...
- SQL Server 2012 Enterprise Core Edition和SQL Server 2012 Enterprise Edition的区别
core没有图形界面,只有power shell界面,给没有图形界面的windows用的.
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- Jmeter命令行方式启动
在性能测试过程中,我们常常遇到这样的问题,使用Jmeter的GUI界面进行大并发量的性能测试时,界面容易卡死,无法继续进行性能测试.通过使用命令行方式启动jmeter是一个不错的方式.下面就简单介绍一 ...
- 搭建Artifactory集群
搭建Artifactory集群 制品仓库系统有很多,例如Artifactory.Archiva.Sonatype Nexus.Eclipse Package Drone,其中Artifactory拥有 ...
- 【caffe-windows】 caffe-master 之Matlab中model的分类应用
此篇讲述在matlab中,如何将训练好的model用于图像分类.将以mnist为例,主要用到caffe-master\matlab\demo 下的classification_demo.m ,可参考我 ...
- SICP 换零钱的迭代版本
看到换零钱方式统计这里, 书中给出了递归的实现但没有给出迭代版本说要留给读者作为挑战, 既然说是作为挑战那肯定是能解决的,在想了一天无果之后最终在别人博客的帮助下终于实现了迭代的版本...也算是经历坎 ...
- Flash图表控件FusionCharts如何在图表标绘非连续数据
你可能经常要以不完整的数据点绘制图表.例如,当绘制每月的销售图表时,你可能没有所有的月数据.所以,你可能只想以一个空白的区域来显示缺失的数据,不在这个区域中绘制任何东西.FusionCharts可以让 ...
- 【LeetCode】6. ZigZag Conversion 锯齿形转换
题目: 思路: 以图为例:s={'A','B','C','D','E','F','G','H'.....} 1.先不考虑中间元素F.G.H.N...,每一行前后元素在数组中对应下标相差size=2*n ...
- [Oracle] 中的Temporary tablespace的作用
临时表空间主要用途是在数据库进行排序运算[如创建索引.order by及group by.distinct.union/intersect/minus/.sort-merge及join.analyze ...