利用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& ...
随机推荐
- Nginx 内置全局变量
Nginx在使用过程中,有不少的内置全局变量可以用做条件判断和编程控制,本文总结一些已知的指令,以供参考. $arg_PARAMETER 这个变量包含在查询字符串时GET请求PARAMETER的值. ...
- MFC学习 进程间通信
内存共享通信方式 server.cpp #include <stdio.h> #include <Windows.h> int main() { HANDLE hFile; h ...
- android 基础控件 EditText
EditText 简介: EditText 控件继承 TextView ,它有TextView的所有属性和方法,并且自身是可编辑的: extends TextView java.lang.Object ...
- 《点石成金-访客至上的web和移动可用性设计秘籍》读书笔记
简介 作者Steve Krug,惯例先去了解一下本书的作者,发现书中介绍的并不多,百度一下后发现这本书比作者出名.好吧,百度就是这样子,作者自称web可用性咨询师,手上这本书是第三版再版,第一版2 ...
- [译]使用AES 256以达到SSL/TLS安全最大化
原文链接:https://luxsci.com/blog/256-bit-aes-encryption-for-ssl-and-tls-maximal-security.html 原文发表时间:201 ...
- Android常见包
Android.jar常见包 android.app-----------提供高层的程序模型.提供基本的运行环境android.content-------包含各种的对设备上的数据进行访问和发布的类a ...
- json 對象的序列化
var a={x:1,y:2} s=JSON.stringify(a); //s="{"x":1,"y":2}" p=JSON.parse( ...
- curl返回常见错误码
转自:http://blog.csdn.net/cwj649956781/article/details/8086337 CURLE_OK() 所有罚款.继续像往常一样. CURLE_UNSUPPOR ...
- DEDECMS自动编号(序号)autoindex属性
让织梦dedecms autoindex,itemindex 从0到1开始的办法! 1 2 3 [field:global name=autoindex runphp="yes"] ...
- C# 发送邮件方法
发送邮件所用的核心知识点 微软封装好的MailMessage类:主要处理发送邮件的内容(如:收发人地址.标题.主体.图片等等) 微软封装好的SmtpClient类:主要处理用smtp方式发送此邮件的配 ...