-
使用关键字作为变量名,需要在变量名前加 @
如public string @event { get; set; }
-
VS(2015)智能提示汉化
将C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\zh-Hans
内的文件复制到\v4.5\zh-Hans
。重启vs
-
RequestUtility
public class RequestUtility
{
public const string Application_X_WWW_Form_UrlEncoded = "application/x-www-form-urlencoded;charset=utf-8;";
public const string Multipart_Form_Data = "multipart/form-data;";
public const string Application_JSON = "application/json;charset=utf-8;";
public const string Text_XML = "text/xml;";
public Result<string> RequestHttpByGet(string _url)
{
var rslt = new Result<string>();
if (string.IsNullOrEmpty(_url))
{
rslt.Message = "请求的目标地址无效。";
return rslt;
}
var rqst = (HttpWebRequest)WebRequest.Create(_url);
rqst.Method = "get";
try
{
using (var response = rqst.GetResponse())
{
using (var strm = response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
rslt.State = true;
}
}
}
}
catch (WebException err)
{
rslt.Message = err.Message;
try
{
using (var strm = err.Response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
return rslt;
}
}
}
catch (Exception err2)
{
rslt.Message += " - " + err2.Message;
return rslt;
}
}
catch (Exception err)
{
rslt.Message = err.Message;
return rslt;
}
return rslt;
}
public Result<string> RequestHttpByGet(string _url, Encoding _encoding)
{
var rslt = new Result<string>();
if (string.IsNullOrEmpty(_url))
{
rslt.Message = "请求的目标地址无效。";
return rslt;
}
var rqst = (HttpWebRequest)WebRequest.Create(_url);
rqst.Method = "get";
try
{
using (var response = rqst.GetResponse())
{
using (var strm = response.GetResponseStream())
{
using (var reader = new StreamReader(strm, _encoding))
{
rslt.Data = reader.ReadToEnd();
rslt.State = true;
}
}
}
}
catch (WebException err)
{
rslt.Message = err.Message;
try
{
using (var strm = err.Response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
return rslt;
}
}
}
catch (Exception err2)
{
rslt.Message += " - " + err2.Message;
return rslt;
}
}
catch (Exception err)
{
rslt.Message = err.Message;
return rslt;
}
return rslt;
}
/// <summary>
/// post请求【application/json】
/// </summary>
/// <param name="_parmJson">参数json</param>
public Result<string> RequestHttpByPost(string _url, string _parmJson)
{
var rslt = new Result<string>();
if (string.IsNullOrEmpty(_url))
{
rslt.Message = "请求的目标地址无效。";
return rslt;
}
var rqst = (HttpWebRequest)WebRequest.Create(_url);
rqst.Method = "post";
rqst.ContentType = Application_JSON;
var parm = Encoding.UTF8.GetBytes(_parmJson);
rqst.ContentLength = parm.Length;
using (var strm = rqst.GetRequestStream())
{
strm.Write(parm, 0, parm.Length);
}
try
{
using (var response = rqst.GetResponse())
{
using (var strm = response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
rslt.State = true;
}
}
}
}
catch (WebException err)
{
rslt.Message = err.Message;
try
{
using (var strm = err.Response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
return rslt;
}
}
}
catch (Exception err2)
{
rslt.Message += " - " + err2.Message;
return rslt;
}
}
catch (Exception err)
{
rslt.Message = err.Message;
return rslt;
}
return rslt;
}
/// <summary>
/// post请求【form】
/// </summary>
/// <param name="_parm">参数</param>
public Result<string> RequestHttpByPost(string _url, Dictionary<string, string> _parm = null)
{
var rslt = new Result<string>();
if (string.IsNullOrEmpty(_url))
{
rslt.Message = "请求的目标地址无效。";
return rslt;
}
var rqst = (HttpWebRequest)WebRequest.Create(_url);
rqst.Method = "post";
rqst.ContentType = Application_X_WWW_Form_UrlEncoded;
if (_parm != null && _parm.Count > 0)
{
var sbParm = new StringBuilder();
foreach (var itmParm in _parm)
{
sbParm.Append($"{itmParm.Key}={itmParm.Value}&");
}
sbParm.Remove(sbParm.Length - 1, 1);
var parm = Encoding.UTF8.GetBytes(sbParm.ToString());
rqst.ContentLength = parm.Length;
using (var strm = rqst.GetRequestStream())
{
strm.Write(parm, 0, parm.Length);
}
}
try
{
using (var response = rqst.GetResponse())
{
using (var strm = response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
rslt.State = true;
}
}
}
}
catch (WebException err)
{
rslt.Message = err.Message;
try
{
using (var strm = err.Response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
return rslt;
}
}
}
catch (Exception err2)
{
rslt.Message += " - " + err2.Message;
return rslt;
}
}
catch (Exception err)
{
rslt.Message = err.Message;
return rslt;
}
return rslt;
}
/// <summary>
/// 上传文件【formdata】
/// 若多文件上传,则可将 _file 参数改为 list 类型
/// </summary>
/// <param name="_file">文件:item1【文件key】;item2【文件名】;item3【文件二进制】</param>
/// <param name="_parm">附加参数</param>
public Result<string> RequestHttpByPost(string _url, Tuple<string, string, byte[]> _file, Dictionary<string, string> _parm = null)
{
var rslt = new Result<string>();
#region 生成 boundary
var chars = new char[] {
'0', '1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
};
short _Len = 6, bLen = 11, cLen = (short)chars.Length;
var sbBoundary = new StringBuilder(_Len + bLen);
for (var i = 0; i < _Len; i++)
sbBoundary.Append("-");
var r = new Random();
for (var i = 0; i < bLen; i++)
sbBoundary.Append(chars[r.Next(0, cLen)]);
var boundary = sbBoundary.ToString();
#endregion
var rqst = (HttpWebRequest)WebRequest.Create(_url);
rqst.Method = "POST";
rqst.ContentType = $"{Multipart_Form_Data}boundary={boundary}";
var enter = "\r\n";
#region 定义请求体中的内容 并转成二进制
var sbParm = new StringBuilder();
// 普通数据
if (_parm != null)
{
foreach (var itm in _parm)
{
sbParm.Append($"--{boundary}{enter}Content-Disposition:form-data;name=\"{itm.Key}\"{enter}{enter}{itm.Value}{enter}");
}
}
// 文件描述数据
sbParm.Append($"--{boundary}{enter}Content-Disposition:form-data;name=\"{_file.Item1}\";filename=\"{_file.Item2}\"{enter}Content-Type:application/octet-stream{enter}{enter}");
var parmBytes = Encoding.UTF8.GetBytes(sbParm.ToString());
// 结尾数据
var end = $"{enter}--{boundary}--{enter}";
var endBytes = Encoding.UTF8.GetBytes(end);
rqst.ContentLength = parmBytes.Length + _file.Item3.Length + endBytes.Length;
using (var strm = rqst.GetRequestStream())
{
strm.Write(parmBytes, 0, parmBytes.Length);
strm.Write(_file.Item3, 0, _file.Item3.Length);
strm.Write(endBytes, 0, endBytes.Length);
}
#endregion
try
{
using (var response = rqst.GetResponse())
{
using (var strm = response.GetResponseStream())
{
using (var reader = new StreamReader(strm, Encoding.UTF8))
{
rslt.Data = reader.ReadToEnd();
rslt.State = true;
}
}
}
}
catch (WebException err)
{
rslt.Message = err.Message;
try
{
using (var strm = err.Response.GetResponseStream())
{
using (var reader = new StreamReader(strm))
{
rslt.Data = reader.ReadToEnd();
return rslt;
}
}
}
catch (Exception err2)
{
rslt.Message += " - " + err2.Message;
return rslt;
}
}
catch (Exception err)
{
rslt.Message = err.Message;
return rslt;
}
return rslt;
}
}
复制代码
-
Result
public class Result
{
public bool State { get; set; }
public string Message { get; set; }
#region 构造函数
public Result(bool _state)
{
State = _state;
}
public Result() : this(false) { }
public Result(string _msg) : this(false)
{
Message = _msg;
}
public Result(bool _state, string _msg) : this(_state)
{
Message = _msg;
}
#endregion
}
public class Result<T> : Result
{
public T Data { get; set; }
#region 构造函数
public Result() : base() { }
public Result(bool _state) : base(_state) { }
public Result(string _msg) : base(_msg) { }
public Result(bool _state, string _msg) : base(_state, _msg) { }
public Result(T _data) : base(true)
{
Data = _data;
}
public Result(bool _state, T _data) : base(_state)
{
Data = _data;
}
public Result(bool _state, string _msg, T _data)
{
State = _state;
Message = _msg;
Data = _data;
}
#endregion
}
复制代码
-
常用基础方法
/// <summary>
/// 遍历枚举值
/// </summary>
public List<int> GetEnumValues<T>() where T : struct
{
var rslt = new List<int>();
var tType = typeof(T);
if (!tType.IsEnum)
return rslt;
rslt = Enum.GetValues(tType).Cast<int>().ToList();
return rslt;
}
/// <summary>
/// 获取枚举项的描述文本
/// </summary>
public string GetDescription<T>(this T _v) where T : struct
{
var vType = typeof(T);
if (!vType.IsEnum)
return null;
var tName = vType.FullName;
//emDescriptionCache.ContainsKey("");
var fieldInfo = vType.GetField(_v.ToString());
var attr = (DescriptionAttribute)fieldInfo?.GetCustomAttribute(typeof(DescriptionAttribute), false);
return attr?.Description;
}
/// <summary>
/// 删除字符串中的中文
/// </summary>
public string DeleteChinese(string _string)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(_string, @"[\u4e00-\u9fa5]"))
return _string;
var newString = new StringBuilder();
var chars = _string.ToCharArray();
for (int idx = 0, len = chars.Length; idx < len; idx++)
{
if (chars[idx] >= 0x4e00 && chars[idx] <= 0x9fa5)
continue;
newString.Append(chars[idx]);
}
return newString.ToString();
}
/// <summary>
/// 获取当前时间的总时,分,秒等
/// </summary>
public long getTotalTime(this DateTime _v, emDTType _dtType = emDTType.millisecond)
{
var ticks = _v.Ticks;
long v;
switch (_dtType)
{
case emDTType.millisecond:
v = ticks / 10000;
break;
case emDTType.second:
v = ticks / 10000 / 1000;
break;
case emDTType.minute:
v = ticks / 10000 / 1000 / 60;
break;
case emDTType.hour:
v = ticks / 10000 / 1000 / 60 / 60;
break;
case emDTType.day:
v = ticks / 10000 / 1000 / 60 / 60 / 24;
break;
default:
v = 0;
break;
}
return v;
}
public enum emDTType
{
millisecond = 0,
second = 1,
minute = 2,
hour = 3,
day = 4
}
复制代码
-
DateUtility