在学习创建API时以此为案例,仅仅为经验交流。
一、项目建立
1、建立一个asp.net Web应用程序
2、添加新项-》添加Web服务(asmx)文件
3、为API(.asmx)添加一个程序控制类,用来处理 返回结果格式和入参格式内容的校验
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace DingdingAPIdemo
{
public class DingdingAPIProcessing
{
#region 单实例
static DingdingAPIProcessing InterFace = null;
public static DingdingAPIProcessing Getinfo()
{
if(InterFace == null)
{
InterFace = new DingdingAPIProcessing();
}
return InterFace;
}
#endregion
#region 统一输出格式
public string GetSuccessResponseJsonstr(string strReturn)
{
/*
{
"Name" : "DingdingInterface",
"key" : "1",
"title":"返回成功",
"word":"" 这里是返回结果
}
*/
strReturn = "{ " +
"\"Name\":\"ThirdInterface\"," +
"\"key\":\"1\"," +
"\"title\":\"返回成功\"," +
"\"word\":\"" + strReturn + "\""
+ "}";
return strReturn;
}
public string GetErrorResponseJsonstr(string strReturn)
{
/*
{
"Name" : "ThirdInterface",
"key" : "9",
"title":"返回失败",
"error":"" 这里是返回结果
}
*/
strReturn = "{ " +
"\"Name\":\"ThirdInterface\"," +
"\"key\":\"9\"," +
"\"title\":\"返回失败\"," +
"\"error\":\"" + strReturn + "\""
+ "}";
return strReturn;
}
#endregion
public string ThridToDingding(string type,string strXml)
{
switch (type)
{
case "GetUser":
string strReturn = DingdingType.Getinfo().GetUser(strXml);;
return GetSuccessResponseJsonstr(strReturn);
default:
string strErorr = "当前【" + type + "】功能缺失";
return GetErrorResponseJsonstr(strErorr);
}
}
}
}
4、创建一个钉钉接口类,用来调用钉钉的接口。
(1)添加引用 Newtonsoft.Json 用来处理返回结果提取Token。
(2)添加一个GET请求与获取结果的类,如果自己有就用自己的,没有的可以参考我的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Specialized;
using System.Net;
using System.IO;
namespace BaseFuction
{
public class HttpNew
{
public static byte[] Post(string uri, NameValueCollection pairs)
{
byte[] response = null;
using (WebClient client = new WebClient())
{
response = client.UploadValues(uri, pairs);
}
return response;
}
/// <summary>
/// GET请求与获取结果
/// </summary>
public static string HttpGet(string Url, string postDataStr)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
}
}
(3)添加钉钉接口类:
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Xml;
namespace DingdingAPIdemo
{
public class DingdingType
{
#region 单实例
static DingdingType m_dingdingType = null;
public static DingdingType Getinfo()
{
if(m_dingdingType == null)
{
m_dingdingType = new DingdingType();
}
return m_dingdingType;
}
#endregion
/// <summary>
/// get方式获取请求结果
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public string SendRequest(string url, Encoding encoding)
{
if(encoding == null){
encoding = Encoding.UTF8;
}
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "GET";
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
StreamReader sr = new StreamReader(webResponse.GetResponseStream(), encoding);
string str = sr.ReadToEnd();
return str;
}
//声明appid和secret 用来获取token
static string appid = "《你的appid》";
static string appsecret = "《secret》";
public string GetToken()
{
string url = "https://oapi.dingtalk.com/gettoken?appkey=" + appid + "&appsecret=" + appsecret;
string tokenlink = SendRequest(url, null);
//返回结果:{ "errcode":0,"access_token":"946e8613614d335d81fc1dd87621971f","errmsg":"ok","expires_in":7200}
JObject Jobj = JObject.Parse(tokenlink); //将Json格式转换
string access_Token = Jobj["access_token"].ToString();//提取access_token
return access_Token;
}
public string GetUser( string strXml)
{
/*
* 传入的参数格式:<Request>
* <UserId>001</UserId>
* </Request>
*
*
*
*
*/
//
XmlDocument xml = new XmlDocument();
xml.LoadXml(strXml);
string userId = xml.SelectSingleNode("Request/UserId").InnerText;
string url = "https://oapi.dingtalk.com/topapi/v2/user/get?access_token=" + GetToken();
NameValueCollection nameValue = new NameValueCollection();
nameValue.Add("language", "zh_CN");
nameValue.Add("userid", userId);
byte[] vs = HttpNew.Post(url, nameValue);
//具体业务
return System.Text.Encoding.UTF8.GetString(vs);
}
}
}
二、项目运行