请教一个关于 WindUrlHelper:createUrl 这个方法的哈多xado使用出问题问题

铜币1222两
阅读:3751回复:9
长沙通手机版.基于民间论坛修改.
发布于: 17:57
【官方推荐wap站】-phpwind民间论坛安装包: &
小弟并不是专业的,也从没正规的学过任何网页知识,
因此可能仿的不是很好.请见谅.
首先我们来修复一个 未登录发帖转跳到电脑版 的问题.
/src/applications/3g/controller/PostController.php
找到:
$this-&showError($error);替换成:
$this-&forwardAction('3g/login/run', array('backurl' =& WindUrlHelper::createUrl('3g/post/' . $action, array('fid' =& $this-&post-&forum-&fid))));因为我不大懂php 所以不知道此方法是否有问题.
&下面是模板:
注:CSS有一些 亢余代码.然后页面只是按照长沙通手机版仅有的页面进行了仿制,上传附件是无效的,其余页面未修改。
共2条评分,
助人为快乐之本~
民间的不能上传图片,还有这个可以单独使用吗?
最新喜欢:
★云市场开发者★
铜币3625两
威望1672点
发布于: 18:49
感谢分享!
【站长网交流群】:115啦站长云平台
铜币4102两
威望1339点
发布于: 19:05
哪里有完整版本?
铜币1222两
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 22:24
:哪里有完整版本? 除了长沙通有,别的地方找不到。。
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 19:55
分享者伟大
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 13:30
PW moblie内测组
铜币1719两
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 21:25
民间的不能上传图片,还有这个可以单独使用吗?
PC版期望终于实现了,PWF加油!2017年新的期望:继续优化好PC版,着重开发移动版wap~
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 02:46
铜币1141两
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 15:06
支持,现在看到手机版 wap都会兴奋
PW 8.7内测组
<span class="lou J_floor_copy" title="复制此楼地址"
data-hash="read_楼#
发布于: 15:12
不是很感冒,不过楼主的作品还可以,持续关注中
您需要登录后才可以回帖,&或者&
Powered by微信开发 企业号(三)-- 主动调用(通讯录、多媒体文件、自定义菜单,下发信息) - CosmoKey - 博客园
已完成通讯录、多媒体文件、自定义菜单,下发信息接口代码
结构及父类CodeMap
UserGet接口的CodeMap
通过企业ID及管理员组I的获取Token
string strulr = "https://qyapi./cgi-bin/gettoken?corpid={0}&corpsecret={1}";
string corpID = "wx企业ID"; //企业ID
string Secret = "管理员组ID";//管理员组ID
HttpHelper http = new HttpHelper();
string respone = http.Get(string.Format(strulr, corpID, Secret), Encoding.UTF8);
var token = JsonConvert.DeserializeObject&Token&(respone);
Token._Token =
&返回的Token为
{"access_token":"NttjomfbHraVFAQTYg1NJ4fcP2dbJpnlnUH0TXT27MxxxxxxxxxxxxxxA","expires_in":7200}
&expires_in为Token的有效时长,Token再调用接口时自动续期。
经过封装后的Token类
public class Token
public static Token _T
public string access_token { get; set; }
public int expires_in { get; set; }
private DateTime createTokenTime = DateTime.N
/// &summary&
/// 到期时间(防止时间差,提前1分钟到期)
/// &/summary&
/// &returns&&/returns&
public DateTime TookenOverdueTime
get { return createTokenTime.AddSeconds(expires_in - 60); }
/// &summary&
/// 刷新Token
/// &/summary&
public static void Renovate()
if (_Token == null)
GetNewToken();
Token._Token.createTokenTime = DateTime.N
public static bool IsTimeOut()
if (_Token == null)
GetNewToken();
return DateTime.Now &= Token._Token.TookenOverdueT
public static Token GetNewToken()
string strulr = "https://qyapi./cgi-bin/gettoken?corpid={0}&corpsecret={1}";
string corpID = "wx362a967b"; //企业ID
string Secret = "e1OskLgJAScVSiFfWVK-0FfVz6svRVdEbR";//管理员组ID
HttpHelper http = new HttpHelper();
string respone = http.Get(string.Format(strulr, corpID, Secret), Encoding.UTF8);
var token = JsonConvert.DeserializeObject&Token&(respone);
Token._Token =
public static string GetToken()
if (_Token == null)
GetNewToken();
return _Token.access_
自己写的而一个HttpHelper类,方便与Web服务器使用HTTP协议进行通信。
using System.Collections.G
using System.IO;
using System.L
using System.N
using System.Net.S
using System.Security.Cryptography.X509C
using System.T
using System.Threading.T
namespace Ping.Helper
public class HttpHelper
public bool Debug { get; set; }
public CookieCollection Cookies
get { return _ }
public void ClearCookies()
_cookies = new CookieCollection();
CookieCollection _cookies = new CookieCollection();
private static readonly string DefaultUserAgent = "Mozilla/5.0 ( MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
/// &summary&
/// 创建GET方式的HTTP请求
/// &/summary&
/// &param name="url"&请求的URL&/param&
/// &param name="timeout"&请求的超时时间&/param&
/// &param name="userAgent"&请求的客户端浏览器信息,可以为空&/param&
/// &param name="cookies"&随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空&/param&
/// &returns&&/returns&
public HttpWebResponse CreateGetHttpResponse(string url, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
if (Debug)
Console.Write("Start Get Url:{0}
if (string.IsNullOrEmpty(url))
throw new ArgumentNullException("url");
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebR
request.ProtocolVersion = HttpVersion.Version10;
request = WebRequest.Create(url) as HttpWebR
request.Method = "GET";
request.Headers["Pragma"] = "no-cache";
request.Accept = "text/html, application/xhtml+xml, */*";
request.Headers["Accept-Language"] = "en-US,q=0.5";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = DefaultUserA
request.Referer = R
if (headers != null)
foreach (var header in headers)
request.Headers.Add(header.Key, header.Value);
if (!string.IsNullOrEmpty(userAgent))
request.UserAgent = userA
if (timeout.HasValue)
request.Timeout = timeout.Value * 1000;
if (cookies != null)
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(Cookies);
var v = request.GetResponse() as HttpWebR
Cookies.Add(request.CookieContainer.GetCookies(new Uri("http://" + new Uri(url).Host)));
Cookies.Add(request.CookieContainer.GetCookies(new Uri("https://" + new Uri(url).Host)));
Cookies.Add(v.Cookies);
if (Debug)
Console.WriteLine("OK");
/// &summary&
/// 创建POST方式的HTTP请求
/// &/summary&
/// &param name="url"&请求的URL&/param&
/// &param name="parameters"&随同请求POST的参数名称及参数值字典&/param&
/// &param name="timeout"&请求的超时时间&/param&
/// &param name="userAgent"&请求的客户端浏览器信息,可以为空&/param&
/// &param name="requestEncoding"&发送HTTP请求时所用的编码&/param&
/// &param name="cookies"&随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空&/param&
/// &returns&&/returns&
public HttpWebResponse CreatePostHttpResponse(string url, IDictionary&string, string& parameters, Encoding requestEncoding, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
if (Debug)
Console.Write("Start Post Url:{0}
foreach (KeyValuePair&string, string& keyValuePair in parameters)
Console.Write(",{0}:{1}", keyValuePair.Key, keyValuePair.Value);
if (string.IsNullOrEmpty(url))
throw new ArgumentNullException("url");
if (requestEncoding == null)
throw new ArgumentNullException("requestEncoding");
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebR
request.ProtocolVersion = HttpVersion.Version10;
request = WebRequest.Create(url) as HttpWebR
request.Method = "POST";
request.Accept = "text/html, application/xhtml+xml, application/json, text/javascript, */*; q=0.01";
request.Referer = R
request.Headers["Accept-Language"] = "en-US,q=0.5";
request.UserAgent = DefaultUserA
request.ContentType = "application/x-www-form-urlencoded";
request.Headers["Pragma"] = "no-cache";
if (headers != null)
foreach (var header in headers)
request.Headers.Add(header.Key, header.Value);
if (cookies != null)
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(Cookies);
if (!string.IsNullOrEmpty(userAgent))
request.UserAgent = userA
request.UserAgent = DefaultUserA
if (timeout.HasValue)
request.Timeout = timeout.Value * 1000;
request.Expect = string.E
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
var buffer = CraeteParameter(parameters);
byte[] data = requestEncoding.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
stream.Write(data, 0, data.Length);
var v = request.GetResponse() as HttpWebR
Cookies.Add(request.CookieContainer.GetCookies(new Uri("http://" + new Uri(url).Host)));
Cookies.Add(request.CookieContainer.GetCookies(new Uri("https://" + new Uri(url).Host)));
Cookies.Add(v.Cookies);
if (Debug)
Console.WriteLine("OK");
/// &summary&
/// 创建POST方式的HTTP请求
/// &/summary&
/// &param name="url"&请求的URL&/param&
/// &param name="parameters"&随同请求POST的参数名称及参数值字典&/param&
/// &param name="timeout"&请求的超时时间&/param&
/// &param name="userAgent"&请求的客户端浏览器信息,可以为空&/param&
/// &param name="requestEncoding"&发送HTTP请求时所用的编码&/param&
/// &param name="cookies"&随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空&/param&
/// &returns&&/returns&
public HttpWebResponse CreatePostHttpResponse(string url, string parameters, Encoding requestEncoding, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
if (Debug)
Console.Write("Start Post Url:{0} ,parameters:{1}
", url, parameters);
if (string.IsNullOrEmpty(url))
throw new ArgumentNullException("url");
if (requestEncoding == null)
throw new ArgumentNullException("requestEncoding");
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebR
request.ProtocolVersion = HttpVersion.Version10;
request = WebRequest.Create(url) as HttpWebR
request.Method = "POST";
request.Headers.Add("Accept-Language", "zh-CN,en-GB;q=0.5");
request.Method = "POST";
request.Accept = "text/html, application/xhtml+xml, */*";
request.Referer = R
request.Headers["Accept-Language"] = "en-US,q=0.5";
request.UserAgent = DefaultUserA
request.ContentType = "application/x-www-form-urlencoded";
request.Headers["Pragma"] = "no-cache";
if (cookies != null)
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(Cookies);
if (headers != null)
foreach (var header in headers)
request.Headers.Add(header.Key, header.Value);
if (!string.IsNullOrEmpty(userAgent))
request.UserAgent = userA
request.UserAgent = DefaultUserA
if (timeout.HasValue)
request.Timeout = timeout.Value * 1000;
request.Expect = string.E
//如果需要POST数据
if (!string.IsNullOrEmpty(parameters))
byte[] data = requestEncoding.GetBytes(parameters);
using (Stream stream = request.GetRequestStream())
stream.Write(data, 0, data.Length);
var v = request.GetResponse() as HttpWebR
Cookies.Add(request.CookieContainer.GetCookies(new Uri("http://" + new Uri(url).Host)));
Cookies.Add(request.CookieContainer.GetCookies(new Uri("https://" + new Uri(url).Host)));
Cookies.Add(v.Cookies);
if (Debug)
Console.WriteLine("OK");
/// &summary&
/// 创建POST方式的HTTP请求
/// &/summary&
/// &param name="url"&请求的URL&/param&
/// &param name="parameters"&随同请求POST的参数名称及参数值字典&/param&
/// &param name="timeout"&请求的超时时间&/param&
/// &param name="userAgent"&请求的客户端浏览器信息,可以为空&/param&
/// &param name="requestEncoding"&发送HTTP请求时所用的编码&/param&
/// &param name="cookies"&随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空&/param&
/// &returns&&/returns&
public HttpWebResponse CreatePostFileHttpResponse(string url, string filePath, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
if (Debug)
Console.Write("Start Post Url:{0}
if (string.IsNullOrEmpty(url))
throw new ArgumentNullException("url");
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebR
request.ProtocolVersion = HttpVersion.Version10;
request = WebRequest.Create(url) as HttpWebR
request.Method = "POST";
request.Accept = "text/html, application/xhtml+xml, application/json, text/javascript, */*; q=0.01";
request.Referer = R
request.Headers["Accept-Language"] = "en-US,q=0.5";
request.UserAgent = DefaultUserA
request.ContentType = "application/x-www-form-urlencoded";
request.Headers["Pragma"] = "no-cache";
if (headers != null)
foreach (var header in headers)
request.Headers.Add(header.Key, header.Value);
if (cookies != null)
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(Cookies);
if (!string.IsNullOrEmpty(userAgent))
request.UserAgent = userA
request.UserAgent = DefaultUserA
if (timeout.HasValue)
request.Timeout = timeout.Value * 1000;
request.Expect = string.E
//如果需要POST数据
if (!string.IsNullOrEmpty(filePath))
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
BinaryReader r = new BinaryReader(fs);
string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");
//请求头部信息
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form- name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(fs.Name);
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append("application/octet-stream");
sb.Append("\r\n");
sb.Append("\r\n");
string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
request.ContentType = "multipart/form- boundary=" + strB
long length = fs.Length + postHeaderBytes.Length + boundaryBytes.L
request.ContentLength =
//开始上传时间
DateTime startTime = DateTime.N
byte[] filecontent = new byte[fs.Length];
fs.Read(filecontent, 0, filecontent.Length);
using (Stream stream = request.GetRequestStream())
//发送请求头部消息
stream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
stream.Write(filecontent, 0, filecontent.Length);
//添加尾部的时间戳
stream.Write(boundaryBytes, 0, boundaryBytes.Length);
var v = request.GetResponse() as HttpWebR
Cookies.Add(request.CookieContainer.GetCookies(new Uri("http://" + new Uri(url).Host)));
Cookies.Add(request.CookieContainer.GetCookies(new Uri("https://" + new Uri(url).Host)));
Cookies.Add(v.Cookies);
if (Debug)
Console.WriteLine("OK");
public static string CraeteParameter(IDictionary&string, string& parameters)
StringBuilder buffer = new StringBuilder();
foreach (string key in parameters.Keys)
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
return buffer.ToString().TrimStart('&');
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
return true; //总是接受
public string Post(string url, IDictionary&string, string& parameters, Encoding requestEncoding, Encoding responseEncoding, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
HttpWebResponse response = CreatePostHttpResponse(url, parameters, requestEncoding, timeout, userAgent, cookies, Referer, headers);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), responseEncoding))
return reader.ReadToEnd();
catch (Exception)
return null;
public string Post(string url, string parameters, Encoding requestEncoding, Encoding responseEncoding, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
HttpWebResponse response = CreatePostHttpResponse(url, parameters, requestEncoding, timeout, userAgent, cookies, Referer, headers);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), responseEncoding))
return reader.ReadToEnd();
catch (Exception)
return null;
public string PostFile(string url, string filePath, Encoding responseEncoding,
int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "",
Dictionary&string, string& headers = null)
HttpWebResponse response = CreatePostFileHttpResponse(url, filePath, timeout, userAgent, cookies, Referer,
using (StreamReader reader = new StreamReader(response.GetResponseStream(), responseEncoding))
return reader.ReadToEnd();
catch (Exception)
return null;
public string Get(string url, Encoding responseEncoding, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
HttpWebResponse response = CreateGetHttpResponse(url, timeout, userAgent, cookies, Referer, headers);
using (StreamReader reader = new StreamReader(response.GetResponseStream(), responseEncoding))
return reader.ReadToEnd();
catch (Exception)
return null;
public byte[] GetFile(string url, out Dictionary&string, string& header, int? timeout = 300, string userAgent = "", CookieCollection cookies = null, string Referer = "", Dictionary&string, string& headers = null)
HttpWebResponse response = CreateGetHttpResponse(url, timeout, userAgent, cookies, Referer, headers);
header = new Dictionary&string, string&();
foreach (string key in response.Headers.AllKeys)
header.Add(key, response.Headers[key]);
System.IO.Stream st = response.GetResponseStream();
byte[] by = new byte[response.ContentLength];
st.Read(by, 0, by.Length);
st.Close();
catch (Exception)
return null;
return null;
HttpHelper类
IHttpSend接口声明,抽象出同一交互接口
public interface IHttpSend
string Send(string url, string data);
代码中Http请求分为4中:普通Get请求,普通Post请求,Post文件上传请求,Get文件下载请求
并且不同请求中,Send方法第二个参数Data包含内容不同
//普通Get请求
public class HttpGetRequest : IHttpSend
public string Send(string url, string data)
return new HttpHelper().Get(url, Encoding.UTF8);
//普通Post请求
public class HttpPostRequest : IHttpSend
public string Send(string url, string data)
return new HttpHelper().Post(url, data, Encoding.UTF8, Encoding.UTF8);
//Post文件上传请求
class HttpPostFileRequest : IHttpSend
public string Send(string url, string data)
return new HttpHelper().PostFile(url, data,Encoding.UTF8);
//Get文件下载请求
class HttpGetFileRequest : IHttpSend
public string Send(string url, string path)
Dictionary&string, string&
var bytes = new HttpHelper().GetFile(url, out header);
if (header["Content-Type"].Contains("application/json"))
return Encoding.UTF8.GetString(bytes);
Regex regImg = new Regex("\"(?&fileName&.*)\"", RegexOptions.IgnoreCase);
MatchCollection matches = regImg.Matches(header["Content-disposition"]);
string fileName = matches[0].Groups["fileName"].V
string filepath = path.TrimEnd('\\') + "\\" + fileN
System.IO.Stream so = new System.IO.FileStream(filepath, System.IO.FileMode.Create);
so.Write(bytes, 0, bytes.Length);
so.Close();
return JsonConvert.SerializeObject(header);
与微信交互
构建微信返回结果基类
public class OperationResultsBase
public int errcode { get; set; }
public string errmsg { get; set; }
构建统一发送接口,并使用协变,方便构造统一队列
public interface ISend&out T&
where T : OperationResultsBase, new()
构建微信发送基类
public abstract class OperationRequestBase&T, THttp& : ISend&T&
where T : OperationResultsBase, new()
where THttp : IHttpSend, new()
protected abstract string Url();
/// &summary&
/// 视同attribute进行简单校验
/// &/summary&
/// &param name="message"&&/param&
/// &returns&&/returns&
private bool Verify(out string message)
message = "";
foreach (var pro in this.GetType().GetProperties())
var v = pro.GetCustomAttributes(typeof(IVerifyAttribute), true);
foreach (IVerifyAttribute verify in pro.GetCustomAttributes(typeof(IVerifyAttribute), true))
if (!verify.Verify(pro.PropertyType, pro.GetValue(this), out message))
return false;
return true;
/// &summary&
/// 格式化URL,替换Token
/// &/summary&
/// &returns&&/returns&
protected string GetUrl()
if (Token.IsTimeOut())
Token.GetNewToken();
string url = Url();
if (url.Contains("=ACCESS_TOKEN"))
url = url.Replace("=ACCESS_TOKEN", "=" + Token.GetToken());
/// &summary&
/// &/summary&
/// &returns&&/returns&
public T Send()
string message = "";
if (!Verify(out message))
throw new Exception(message);
//string result = new HttpHelper().Post(url, JsonConvert.SerializeObject(this), Encoding.UTF8, Encoding.UTF8);
IHttpSend httpSend = new THttp();
string result = HttpSend(httpSend, GetUrl());
return GetDeserializeObject(result);
/// &summary&
/// 处理返回结果
/// &/summary&
/// &param name="result"&&/param&
/// &returns&&/returns&
protected virtual T GetDeserializeObject(string result)
return JsonConvert.DeserializeObject&T&(result);
/// &summary&
/// 处理发送请求
/// &/summary&
/// &param name="httpSend"&&/param&
/// &param name="url"&&/param&
/// &returns&&/returns&
protected virtual string HttpSend(IHttpSend httpSend, string url)
return httpSend.Send(url, JsonConvert.SerializeObject(this));
基类构造好,后续大部分开发就非常简单了,
需要先构建结果类(如果无特殊字段,可直接使用OperationResultsBase)
构建请求类,继承OperationRequestBase&&类,选择结果类,及发送方式,再构造URL,最后填入所需字段即可
如:开发&部门列表数据"接口
//先构造返回类
public class DepartmentListResult :OperationResultsBase
/// &summary&
/// 部门列表数据。以部门的order字段从小到大排列
/// &/summary&
/// &returns&&/returns&
public List&DepartmentItem& department { get; set; }
public class DepartmentItem
/// &summary&
/// 部门id
/// &/summary&
/// &returns&&/returns&
public string id { get; set; }
/// &summary&
/// 部门名称
/// &/summary&
/// &returns&&/returns&
public string name { get; set; }
/// &summary&
/// 父亲部门id。根部门为1
/// &/summary&
/// &returns&&/returns&
public string parentid { get; set; }
//再构造请求类
public class DepartmentList : OperationRequestBase&DepartmentListResult,HttpPostRequest&
protected override string Url()
return "https://qyapi./cgi-bin/department/list?access_token=ACCESS_TOKEN";
如:开发&创建部门"接口
//返回值类
/// &summary&
/// 创建部门
/// &/summary&
public class DepartmentCreate : OperationRequestBase&OperationResultsBase,HttpPostRequest&
protected override string Url()
return "https://qyapi./cgi-bin/department/create?access_token=ACCESS_TOKEN";
/// &summary&
/// 部门名称。长度限制为1~64个字符
/// &/summary&
/// &returns&&/returns&
[Length(1,64)]
[IsNotNull]
public string name { get; set; }
/// &summary&
/// 父亲部门id。根部门id为1
/// &/summary&
/// &returns&&/returns&
[IsNotNull]
public string parentid { get; set; }
/// &summary&
/// 在父部门中的次序。从1开始,数字越大排序越靠后
/// &/summary&
/// &returns&&/returns&
public string order { get; set; }
最后在加入加单验证机制,如不为空验证,长度限制
public interface IVerifyAttribute
bool Verify(Type type, object obj,out string message);
public class IsNotNullAttribute : Attribute, IVerifyAttribute
bool IsNotNull { get; set; }
string Message { get; set; }
public IsNotNullAttribute()
IsNotNull = true;
Message = "不能为空";
public IsNotNullAttribute(bool isNotNull)
IsNotNull = isNotN
Message = "不能为空";
public IsNotNullAttribute(bool isNull, string message)
IsNotNull = isN
public bool Verify(Type type, object obj, out string message)
message = "";
if (IsNotNull == false)
return true;
if (obj == null)
message = M
return false;
if (obj is IList)
if ((obj as IList).Count &= 0)
message = M
return false;
return true;
public class LengthAttribute : Attribute, IVerifyAttribute
int MinLength { get; set; }
int MaxLength { get; set; }
string Message { get; set; }
public LengthAttribute(int minLength, int maxLength)
MinLength = minL
MaxLength = maxL
Message = string.Format("字符串长度应在{0}到{1}之间",minLength,maxLength);
public LengthAttribute(int minLength, int maxLength,string message)
MinLength = minL
MaxLength = maxL
Message = string.Format(message, minLength, maxLength);
public bool Verify(Type type,object obj,out string message)
message = "";
if (type == typeof(string) && obj != null)
if ((obj as string).Length & MaxLength || (obj as string).Length & MinLength)
message = M
return false;
return true;
评论 - 163

我要回帖

更多关于 哈多xado使用出问题 的文章

 

随机推荐