阿里API 调用类

本文介绍了一个用于调用 Alisoft API 的 C# 类实现,包括签名生成、HTTP 请求发送及 XML 结果解析等关键步骤。该类通过一系列属性和方法实现了 API 的完整调用流程。

最近做Alisoft的一些isv软件,发现除了官方论坛给的一些技术支持外,网上的资料甚少,官方的也有些小BUG。于是自己写了一个API调用类,写的不是很好,但测试了基本没什么BUG;如果大家有更好的这方面资料,能一起拿来学习交流就更好了。

注意:传参的时候必须按照字母顺序传入,先按顺序传参数名,再对应着传值。

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Web;
using System.Security.Cryptography;
using System.IO;
using System.Net;
using System.Xml;
namespace AlisoftApi
ExpandedBlockStart.gifContractedBlock.gif
{
    
public class Alirest
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
ContractedSubBlock.gifExpandedSubBlockStart.gif        
属性#region 属性  
        
protected string result;
        
private string posturl;
        
private string code;
        
private string appid;
        
private string sign;
        
private string _sign;
        
private Int16 statu;
        
private string strxml;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 加密前
        
/// </summary>

        public string Sign1
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return _sign; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { _sign = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 读取返回的xml
        
/// </summary>

        public string Strxml
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return strxml; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 程序状态,1调用成功,2需要绑定用户,-1调用失败
        
/// </summary>

        public Int16 Statu
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return statu; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { statu = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 设置或读取用户签名
        
/// </summary>

        public string Sign
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return sign; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { sign = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 设置或读取appid
        
/// </summary>

        public string Appid
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return appid; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { appid = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 设置或读取认证码
        
/// </summary>

        public string Code
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return code; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { code = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 设置或读取请求参数url
        
/// </summary>

        public string Posturl
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return posturl; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { posturl = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 程序返回结果
        
/// </summary>

        public string Result
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return result; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set { result = value; }
        }

        
#endregion

ContractedSubBlock.gifExpandedSubBlockStart.gif        
构造方法#region 构造方法
        
public Alirest(string _appid, string _code, string[] strpar)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            Appid 
= _appid;
            Code 
= _code;
            SortedList mySL 
= new SortedList();
            
for (int i = 0; i < strpar.Length / 2; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                mySL.Add(strpar[i], strpar[(strpar.Length 
/ 2+ i]);
            }

            StringBuilder signSb 
= new StringBuilder(code);
            
foreach (DictionaryEntry Item in mySL)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                signSb.Append(Item.Key.ToString());
                signSb.Append(Item.Value.ToString());
            }

            Sign1 
= HttpUtility.UrlDecode(signSb.ToString(), Encoding.Default);
            Sign 
= GetMd5(HttpUtility.UrlDecode(signSb.ToString(), Encoding.Default));
            StringBuilder posturlSb 
= new StringBuilder("sip_sign="+Sign);
            
for (int i = 0; i < strpar.Length / 2; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                posturlSb.Append(
"&");
                posturlSb.Append(strpar[i] 
+ "="+ strpar[(strpar.Length / 2+ i]);
            }

            Posturl 
= HttpUtility.UrlDecode(posturlSb.ToString());
            GetUrlContent();
        }
   
        
#endregion

ContractedSubBlock.gifExpandedSubBlockStart.gif        
获取返回信息#region 获取返回信息
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 获取返回信息
        
/// </summary>

        protected void GetUrlContent()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ASCIIEncoding encoding 
= new ASCIIEncoding();
            
byte[] postdata = encoding.GetBytes(Posturl);
            HttpWebRequest myRequest 
= (HttpWebRequest)WebRequest.Create("http://sip.alisoft.com/sip/rest");
            myRequest.Method 
= "POST";
            myRequest.ContentType 
= "application/x-www-form-urlencoded";
            myRequest.ContentLength 
= postdata.Length;
            Stream newStream 
= myRequest.GetRequestStream();
            newStream.Write(postdata, 
0, postdata.Length);
            newStream.Close();
            HttpWebResponse myResponse 
= (HttpWebResponse)myRequest.GetResponse();
            StreamReader reader 
= new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            strxml
=reader.ReadToEnd();
        }

        
#endregion

ContractedSubBlock.gifExpandedSubBlockStart.gif        
获取XML#region 获取XML
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 获取XML
        
/// </summary>
        
/// <param name="XmlRead">要读取的xml节点内容StringResult/result</param>
        
/// <returns></returns>

        public void GetXml(string XmlRead)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            XmlDocument xmlDoc 
= new XmlDocument();
            xmlDoc.LoadXml(Strxml);
            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
if (Strxml.Contains("http://"))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    XmlNode xncode 
= xmlDoc.SelectSingleNode("error_rsp/url");
                    
string result = xmlDoc.SelectSingleNode("error_rsp/url").InnerText;
                    Result 
= result;
                    Statu 
= 2;
                }

                
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    XmlNode xncode 
= xmlDoc.SelectSingleNode(XmlRead);
                    
string result = xmlDoc.SelectSingleNode(XmlRead).InnerText;
                    Statu 
= 1;
                    Result 
= result;
                }

            }

            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                Statu 
= -1;
            }

        }

        
#endregion

ContractedSubBlock.gifExpandedSubBlockStart.gif        
GetMd5#region GetMd5
ExpandedSubBlockStart.gifContractedSubBlock.gif            
/**//// <summary>
            
/// 生成MD5
            
/// </summary>
            
/// <param name="sipsign"></param>
            
/// <returns></returns>

        protected static string GetMd5(string sipsign)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            MD5CryptoServiceProvider md5 
= new MD5CryptoServiceProvider();
            
return BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(sipsign))).Replace("-""");
        }

        
#endregion

    }

}
//前台调用代码
    protected void Button3_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
{        
ExpandedSubBlockStart.gifContractedSubBlock.gif         
string[] par ={"domainid","sip_apiname" ,"sip_appkey" ,"sip_timestamp" ,"userid" , 
             
"3""alisoft.udb.getDomainLoginId" ,  "11111" ,  DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") , TextBox2.Text }
;
         Alirest ali 
= new Alirest("11111""-----------------------", par);
        ali.GetXml(
"StringResult/result");
        
if (ali.Statu == 1)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            TextBox3.Text
=ali.Result;
        }

        
else if (ali.Statu == 2)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            Response.Redirect(ali.Result);
        }

        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            TextBox3.Text 
= ali.Strxml;
        }

        
    }

转载于:https://www.cnblogs.com/wangjianshuang/archive/2008/11/27/1342708.html

【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值