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的更多相关文章

  1. 十二、.net core(.NET 6)添加通用的访问webapi的方法(包括HttpClient和HttpWebRequest)

    开发通用的访问webapi方法. 在common工具文件夹下,新建一个类库项目:Wsk.Core.WebHelper,并引用Package包项目,然后新建一个类HttpClientHelper,用于使 ...

  2. 利用HttpWebRequest实现实体对象的上传

    一 简介 HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对 ...

  3. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  4. C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi

    C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...

  5. HttpWebRequest访问时,错误:(401)未经授权。

    HttpWebRequest访问时,错误:(401)未经授权. 某网页,我不想做登录界面,直接使用域的帐号密码来访问.如果网站设置成Window身份验证,单独的页面都没问题,而是通过使用HttpWeb ...

  6. c#利用HttpWebRequest获取网页源代码

    c#利用HttpWebRequest获取网页源代码,搞了好几天终于解决了,直接获取网站编码进行数据读取,再也不用担心乱码了! 命名空间:Using System.Net private static ...

  7. C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站

    原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...

  8. 利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录

    利用HttpWebRequest和HttpWebResponse获取Cookie并实现模拟登录 tring cookie = response.Headers.Get("Set-Cookie ...

  9. 利用JavaAPI访问HDFS的文件

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. Linux查看物理CPU个数、核数、逻辑CPU个数(转载)

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数cat /proc/cpuinfo| g ...

  2. #define的一些

    // 生成一个字符串 #define NSString(...) [NSString stringWithFormat:__VA_ARGS__]

  3. Linux自动化安装cobbler

    1介绍 1.1 PXE PXE技术与RPL技术不同之处为RPL是静态路由,PXE是动态路由.RPL是根据网卡上的ID号加上其他记录组成的一个Frame(帧)向服务器发出请求.而服务器中已有这个ID数据 ...

  4. leetcode279. Perfect Squares

    learn from DP class Solution { public: int numSquares(int n) { if(n<=0)return 0; int * dp = new i ...

  5. SVN与TortoiseSVN实战:冲突详解(一)

    硬广:<SVN与TortoiseSVN实战>系列已经写了三篇,第一篇<SVN与TortoiseSVN实战:从入门到精通>,第二篇<SVN与TortoiseSVN实战:标签 ...

  6. CI系统

  7. 用代码打开FORM里面用到的数据源

    修改动态报表的时候,尝尝需要根据当前设计里指定的数据源,然后打开AOT去查找,相当的不方便. 于是产生写了一个方法,可以根据传过来的数据源名,去AOT找到TABLE或者VIEW, 直接打开,以便修改. ...

  8. SQLServer转MYSQL的方法(连数据)

    本次转换需要依赖使用工具Navicat Premium. 首先,将数据库移至本地SQLServer,我试过直接在局域网上其他SQLServer服务器上想转到本地Mysql好像有问题,想将远程数据库备份 ...

  9. jquery的end(),addBack()方法example

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. NSString常见用法总结

    //====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...