利用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& ...
随机推荐
- SQLSERVER的兼容级别
今天采用SQL Mannager 2008连接远程的sqlserver数据库,之后弹出一个对话框,修改SQL兼容级别,当时每太注意,一下点击了确定按钮,结果导致两个系统SQL只想全部出错,幸亏发现的早 ...
- Memcached、Redis和MongoDB的区别
Memcached和Redis都是内存数据库. Memcached是多线程运行的: Redis单线程是单线程运行的: MongoDB是文档型的非关系型数据库..Net:RavenDB.
- 《Code Complete》ch.29 集成
WHAT? 集成是这样一种软件开发行为:将一些独立的软件组合为一个完整的系统. WHY? 更容易诊断缺陷 尽早获得一个可工作的产品 更好的顾客关系 增强士气 更可靠地估计进度表 更准确的现状报告 HO ...
- 那些年,我们开发的接口之:QQ登录(OAuth2.0)
那些年,我们开发的接口之:QQ登录(OAuth2.0) 吴剑 2013-06-14 原创文章,转载必须注明出处:http://www.cnblogs.com/wu-jian 前言 开发这些年,做过很多 ...
- oracle错误处理及实操-【INS-20802】
服务器硬件要求:内存>1GB,如果是虚拟机,必须设置内存为1.5G以上. 确定好主机名,安装完成以后,不要再修改主机名,一旦修改会导致oracle启动失败,注意:使用默认的localhost.l ...
- Flex4 中<s:Datagrid>、<mx:Datagrid>添加超链接的完整方法
<s:Datagrid>的添加超链接方法(链接文字会重叠) <s:GridColumn dataField="_fileName" headerText=&quo ...
- Robotlegs2 学习笔记 -- SwiftSuspenders 2.x (2)
Swiftsuspenders2简介 Swiftsuspenders2是一个基于元数据(metadata)的IOC(控制反转,inversion of control)的AS3的解决方案.(对于元数据 ...
- 慕课网-安卓工程师初养成-2-1 Java中的关键字
来源:http://www.imooc.com/code/1176 Java 中常用关键字: 问:这么多,记不住啊......-_-|| 答:现在不需要你记住所有,混个眼熟即可,在学习的过程中,你会逐 ...
- [oracle] listener.ora 、sqlnet.ora 、tnsnames.ora
路径 $ORACLE_HOME/network/admin sqlnet.ora(客户及服务器端) 作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个 ...
- org.springframework.core.NestedIOException
今天遇到的一个小异常,报错信息如下: 2013-11-13 10:00:32 org.apache.catalina.core.StandardContext listenerStart严重: Exc ...