当前位置: 首页 > news >正文

c# Get方式调用WebAPI,WebService等接口

/// <summary>
///  利用WebRequest/WebResponse进行WebService调用的类
/// </summary>
public class WebServiceHelper
{//<webServices>//  <protocols>//    <add name="HttpGet"/>//    <add name="HttpPost"/>//  </protocols>//</webServices>/// <summary>/// 需要WebService支持Get调用/// </summary>public string QueryGetWebService(string URL, string MethodName, Hashtable Pars){string detilurl = URL + "/" + MethodName + "?" + ParsToString(Pars);HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(detilurl);request.Method = "GET";request.ContentType = "application/x-www-form-urlencoded";SetWebRequest(request);try{return ReadXmlResponseString(request.GetResponse());}catch (Exception ex){return "NG:"+ex.ToString();}}/// <summary>/// 针对信息解读(根据实际调整)/// </summary>public string GetReturnInnerMsg(string jsonStr){XmlDocument doc = new XmlDocument();doc.LoadXml(jsonStr);XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(doc.NameTable);xmlnsManager.AddNamespace("ns", "http://wserver");XmlNode returnNode = doc.SelectSingleNode("//ns:return", xmlnsManager);if (returnNode != null){if (returnNode.InnerText.Contains(":")){return returnNode.InnerText.Replace(" ","").Split(':')[1];}return returnNode.InnerText;}else{return "";}}/// <summary>/// 设置WEB请求/// </summary>/// <param name="request"></param>private void SetWebRequest(HttpWebRequest request){request.Credentials = CredentialCache.DefaultCredentials;request.Timeout = 10000;}/// <summary>/// 将Hashtable转换成WEB请求键值对字符串/// </summary>/// <param name="Pars"></param>/// <returns></returns>private string ParsToString(Hashtable Pars){StringBuilder sb = new StringBuilder();foreach (string k in Pars.Keys){if (sb.Length > 0){sb.Append("&");}// sb.Append(HttpUtility.UrlEncode(k) + "=" + HttpUtility.UrlEncode(Pars[k].ToString()));sb.Append(k+ "=" +Pars[k].ToString());}return sb.ToString();}private string ReadXmlResponseString(WebResponse response){StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);string retXml = sr.ReadToEnd();sr.Close();return retXml;}
}

接口无非就是拼接字符串发动到指定的网站

POST 与 Get 一样,改下参数就行

例如:

http://localhost:8080/axis2/services/AAAA/getVerifyCode?args0=abc

返回信息

<ns:getVerifyCodeResponse xmlns:ns="http://wserver">

    <ns:return>C</ns:return>

</ns:getVerifyCodeResponse>

使用方法

 WebServiceHelper webServiceHelper = new WebServiceHelper();

string url="http://localhost:8080/axis2/services/AAAA";

 Hashtable ht = new Hashtable(); //创建一个Hashtable实例                   

//正式库
ht.Add("args0", "abc");

//发送数据
string msg = webServiceHelper.QueryGetWebService(url, "getVerifyCode", ht);
 if (msg.Substring(0, 2)=="NG")
 {
      MessageForm mf = new MessageForm("总成,加密接口通信异常!", msg, true);
      mf.ShowDialog();
      return; 

}

//接收反馈信息

string EnBarCode = webServiceHelper.GetReturnInnerMsg(msg);

-------------------------------------------------------------

asmx   调用:  不推荐,每次使用都需要反射

天气的测试地址

WeatherWebService Web 服务icon-default.png?t=N7T8http://www.webxml.com.cn/WebServices/WeatherWebService.asmxwsdl

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

用方法一:

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity?byProvinceName=上海

方法二:

    /* 调用方式*   string url = "http://www.webservicex.net/globalweather.asmx" ;*   string[] args = new string[2] ;*   args[0] = "Hangzhou";*   args[1] = "China" ;*   object result = WebServiceHelper.InvokeWebService(url ,"GetWeather" ,args) ;*   Response.Write(result.ToString());*/class WebServiceHelper{#region InvokeWebService/// <summary>/// 动态调用web服务/// </summary>/// <param name="url">WSDL服务地址</param>/// <param name="methodname">方法名</param>/// <param name="args">参数</param>/// <returns></returns>public static object InvokeWebService(string url, string methodname, object[] args){return WebServiceHelper.InvokeWebService(url, null, methodname, args);}/// <summary>/// 动态调用web服务/// </summary>/// <param name="url">WSDL服务地址</param>/// <param name="classname">类名</param>/// <param name="methodname">方法名</param>/// <param name="args">参数</param>/// <returns></returns>public static object InvokeWebService(string url, string classname, string methodname, object[] args){string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";if ((classname == null) || (classname == "")){classname = WebServiceHelper.GetWsClassName(url);}try{//获取WSDLWebClient wc = new WebClient();Stream stream = wc.OpenRead(url + "?WSDL");ServiceDescription sd = ServiceDescription.Read(stream);ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();sdi.AddServiceDescription(sd, "", "");CodeNamespace cn = new CodeNamespace(@namespace);//生成客户端代理类代码CodeCompileUnit ccu = new CodeCompileUnit();ccu.Namespaces.Add(cn);sdi.Import(cn, ccu);CSharpCodeProvider icc = new CSharpCodeProvider();//设定编译参数CompilerParameters cplist = new CompilerParameters();cplist.GenerateExecutable = false;cplist.GenerateInMemory = true;cplist.ReferencedAssemblies.Add("System.dll");cplist.ReferencedAssemblies.Add("System.XML.dll");cplist.ReferencedAssemblies.Add("System.Web.Services.dll");cplist.ReferencedAssemblies.Add("System.Data.dll");//编译代理类CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);if (true == cr.Errors.HasErrors){System.Text.StringBuilder sb = new System.Text.StringBuilder();foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors){sb.Append(ce.ToString());sb.Append(System.Environment.NewLine);}throw new Exception(sb.ToString());}//生成代理实例,并调用方法System.Reflection.Assembly assembly = cr.CompiledAssembly;Type t = assembly.GetType(@namespace + "." + classname, true, true);object obj = Activator.CreateInstance(t);System.Reflection.MethodInfo mi = t.GetMethod(methodname);return mi.Invoke(obj, args);/*PropertyInfo propertyInfo = type.GetProperty(propertyname);return propertyInfo.GetValue(obj, null);*/}catch (Exception ex){throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));}}private static string GetWsClassName(string wsUrl){string[] parts = wsUrl.Split('/');string[] pps = parts[parts.Length - 1].Split('.');return pps[0];}#endregion}

 string url = "http://10.255.30.40:9003/LESPrepareDeliveryService.asmx";
            //方法
            string fuc = "getSpsMatDt";
            //参数
            string par = "3210;A1;NS001";
            int Pcount = par.Split(';').Count() + 1;
            //生成参数信息
            string[] args = new string[Pcount];
            for (int i = 0; i < Pcount - 1; i++)
            {
                args[i] = par.Split(';')[i];
            }
            args[Pcount - 1] = dtm;

            //获取Webservice的数据信息
            object result = WebServiceHelper.InvokeWebService(url, fuc, args);
            DataTable dt = (DataTable)result;
            return dt;

相关文章:

c# Get方式调用WebAPI,WebService等接口

/// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类 /// </summary> public class WebServiceHelper {//<webServices>// <protocols>// <add name"HttpGet"/>// <add name"HttpPost"/>// …...

银行数据仓库体系实践(11)--数据仓库开发管理系统及开发流程

数据仓库管理着整个银行或公司的数据&#xff0c;数据结构复杂&#xff0c;数据量庞大&#xff0c;任何一个数据字段的变化或错误都会引起数据错误&#xff0c;影响数据应用&#xff0c;同时业务的发展也带来系统不断升级&#xff0c;数据需求的不断增加&#xff0c;数据仓库需…...

微信小程序引导用户打开定位授权通用模版

在需要使用位置信息的页面&#xff08;例如 onLoad 或 onShow 生命周期函数&#xff09;中调用 wx.getSetting 方法检查用户是否已经授权地理位置权限&#xff1a; Page({onLoad: function() {wx.getSetting({success: res > {if (res.authSetting[scope.userLocation]) {/…...

JVM篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、JAVA 强引用二、JAVA软引用三、JAVA弱引用四、JAVA虚引用五、分代收集算法前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧…...

DevSecOps 参考模型介绍

目录 一、参考模型概述 1.1 概述 二、参考模型分类 2.1 DevOps 组织型模型 2.1.1 DevOps 关键特性 2.1.1.1 模型特性图 2.1.1.2 特性讲解 2.1.1.2.1 自动化 2.1.1.2.2 多边协作 2.1.1.2.3 持续集成 2.1.1.2.4 配置管理 2.1.2 DevOps 生命周期 2.1.2.1 研发过程划分…...

什么是okhttp?

OkHttp简介&#xff1a; OkHttp 是一个开源的、高效的 HTTP 客户端库&#xff0c;由 Square 公司开发和维护。它为 Android 和 Java 应用程序提供了简单、强大、灵活的 HTTP 请求和响应的处理方式。OkHttp 的设计目标是使网络请求变得更加简单、快速、高效&#xff0c;并且支持…...

R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)

变量 R 语言的有效的变量名称由字母&#xff0c;数字以及点号 . 或下划线 _ 组成。 变量名称以字母或点开头。 变量名是否正确原因var_name2.正确字符开头&#xff0c;并由字母、数字、下划线和点号组成var_name%错误% 是非法字符2var_name错误不能数字开头 .var_name, var.…...

CTF-WEB的入门真题讲解

EzLogin 第一眼看到这个题目我想着用SQL注入 但是我们先看看具体的情况 我们随便输入admin和密码发现他提升密码不正确 我们查看源代码 发现有二个不一样的第一个是base64 意思I hava no sql 第二个可以看出来是16进制转化为weak通过发现是个弱口令 canyouaccess 如果…...

【C项目】顺序表

简介&#xff1a;本系列博客为C项目系列内容&#xff0c;通过代码来具体实现某个经典简单项目 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…...

【Docker】在Windows下使用Docker Desktop创建nginx容器并访问默认网站

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…...

详讲api网关之kong的基本概念及安装和使用(二)

consul的服务注册与发现 如果不知道consul的使用&#xff0c;可以点击上方链接&#xff0c;这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道&#xff0c;配置upstream可以实现负载均衡&#xff0c;而consul实现了服务注册与发现&#xff0c;那么接下来…...

取消Vscode在输入符号时自动补全

取消Vscode在输入符号时自动补全 取消Vscode在输入符号时自动补全问题演示解决方法 取消Vscode在输入符号时自动补全 问题演示 在此状态下输入/会直接自动补全, 如下图 笔者想要达到的效果为可以正常输入/而不进行补全, 如下图 解决方法 在设置->文本编辑器->建议, 取消…...

ElementUI Form:Input 输入框

ElementUI安装与使用指南 Input 输入框 点击下载learnelementuispringboot项目源码 效果图 el-input.vue 页面效果图 项目里el-input.vue代码 <script> export default {name: el_input,data() {return {input: ,input1: ,input2: ,input3: ,input4: ,textarea: …...

Vue_Router_守卫

路由守卫&#xff1a;路由进行权限控制。 分为&#xff1a;全局守卫&#xff0c;独享守卫&#xff0c;组件内守卫。 全局守卫 //创建并暴露 路由器 const routernew Vrouter({mode:"hash"//"hash路径出现#但是兼容性强&#xff0c;history没有#兼容性差"…...

GDB调试技巧实战--自动化画出类关系图

1. 前言 上节我们在帖子《Modern C++利用工具快速理解std::tuple的实现原理》根据GDB的ptype命令快速的理解了std::tuple数据结构的实现,但是手动一个个打印,然后手动画出的UML图,这个过程明显可以自动化。 本文旨在写一个GDB python脚本把这个过程自动化。 本脚本也可以用…...

python使用Schedule

目录 一&#xff1a;使用场景&#xff1a; 二&#xff1a;参数 三&#xff1a;实例 "Schedule"在Python中通常指的是时间调度或任务计划。Python中有多个库可以用来处理时间调度和任务计划&#xff0c;其中最流行的是schedule库。 一&#x…...

Linux系列之查看cpu、内存、磁盘使用情况

查看磁盘空间 df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间&#xff0c;目前还剩下多少空间等信息。使用df -h命令&#xff0c;加个-h参数是为了显示GB MB KB单位&#xff0c;这样更容易查看 Filesystem …...

【C语言】socket编程接收问题

一、recv()函数接收到的返回值为0表示对端已经关闭 在TCP套接字编程中&#xff0c;通过recv()函数接收到的返回值为0通常表示对端已经关闭了套接字的发送部分。这是因为TCP是一个基于连接的协议&#xff0c;其中有定义明确的连接建立和终止流程&#xff1b;当对端调用close()或…...

Python与ArcGIS系列(二十)GDAL之合并shp和geojson要素图层

目录 0 简述1 代码实现2 结果展示0 简述 Shp格式是GIS中非常重要的数据格式,主要在Arcgis中使用,但在进行很多基于网页的空间数据可视化时,通常只接受GeoJSON格式的数据,众所周知JSON是利用键值对+嵌套来表示数据的一种格式,以其轻量、易解析的优点,被广泛使用与各种领域…...

CGAL5.4.1 边塌陷算法

目录 1、使用曲面网格的示例 2、使用默认多面体的示例 3、使用丰富多面体的示例 主要对1、使用曲面网格的示例 进行深度研究 CGAL编译与安装CGAL安装到验证到深入_cgal测试代码-CSDN博客 参考资料CGAL 5.4.5 - Triangulated Surface Mesh Simplification: User Manual …...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上

一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema&#xff0c;不需要复杂的查询&#xff0c;只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 &#xff1a;在几秒钟…...