C#:HTTP客户端与服务器的实现

HTTP协议算是使用最广泛的Web协议了,主要面向基于B/S的实现。对于很多语言比如PHP或者javascript等Web语言,HTTP协议使用上甚至比TCP协议更简单。但这协议对普通的系统语言程序员就不太友好了。C#这种语言嘛,支持上还行,但并没达到特别优秀的效果,比如发起一个POST请求至少需要十行代码以上。这个库是我基于对C#语言封装的协议的了解,在此基础上新增的一个更加方便开发的库。源码在 https://github.com/fawdlstty/hanHttpLib 查看或下载。因为可能更新频繁,所以源码我就不在文章里面贴了。
目前这个库不算特别优秀,目前只支持基础的调用,结构也非常简单,但它能力可不差,用来给小伙伴学习也是极好的。我将不定期更新它,力争将其做到完美。
先说说HTTP的客户端。HTTP客户端主要是浏览器用来请求Web服务器上的资源用的,最广泛的就是浏览器了。每个浏览器都有一套HTTP客户端实现方式,请求完成资源后在界面上显示。但随着时代的发展,HTTP协议有着基本化的趋势。因为使用HTTPS进行通讯可以使用非常小的代价就能非常安全的加密通讯数据。另外HTTP客户端也不止是做浏览器了,除此之外最大的用处是做爬虫。比如很多零散的数据分布在零散的Web服务器上,这时就可以使用爬虫技术将零散的数据归纳起来。更加厉害的就是,再结合人工智能技术,爬取数据之后使用人工智能进行分析,差不多就能成就改变世界的武器了。
继续阅读C#:HTTP客户端与服务器的实现

C#:扩展方法集合类

扩展方法集合类在C#中是一种特别的语法糖,可以在开发中极大简化代码的编写。主要功能是在系统类中创建自定义方法。比如字符串转数字,每次都得Convert.ToInt32 (str),从语法上来说就太不简洁了。下面我一步一步讲解扩展方法集合类的编写。首先创建一个静态类,类名必须为ExtensionMethods。示例代码如下

1
2
3
public static class ExtensionMethods {
    //...
}

所有扩展方法都需要放在此类中进行实现。首先创建一个静态函数,第一个参数使用this描述符,表示基于哪个类提供扩展方法

1
2
3
public static Int32 toInt32 (this object o) {
    return Convert.ToInt32 (o);
}

此函数代表在object这个类基础上新增一个扩展方法,无参数,返回值为Int32类型。示例调用代码如下:

1
int t = "123".toInt32();

下面我提供一个我自用的扩展方法集合类供参阅
继续阅读C#:扩展方法集合类

C#:使用OpenXML读写Excel文档

对于Office文件的读写操作始终是一个比较麻烦的事情,最近做了一个Office操作的小程序,写一个文章用于备忘。
Office文件读写方法挺多,最好的方法自然是OpenXML无疑,但这库用起来还是比较麻烦。我在此做一个Excel读写小例子,其他Office类型同理。
对于OpenXML这库,首先需要知道OpenXML是什么。新建一个Excel文件,另存为a.xlsx,然后将其重命名为a.rar,解压,然后看到一大堆xml文件。不用怀疑,这就是xml标准。对于Office文件的读的访问来说,如果对OpenXML不熟,并且使用其他语言不方便调用C#的库,那么,手工解压然后找找数据的位置,然后手工解析,是最快捷的方式。当然,在可以使用OpenXML的场合,我个人还是推荐使用OpenXML。
OpenXML2.5下载地址(主体工具摘自微软官网,扩展摘自网络):https://pan.baidu.com/s/1slDa0Jr,提取码98dd
这个工具只有英语版的,但由于操作过于简单,所以对于英语小白也完全无压力。
继续阅读C#:使用OpenXML读写Excel文档

ASP.Net 后台访问Cookie的封装

这是一个类,用于提供后台C#访问Cookie,函数不多,只有几个,包括设置、获取、修改。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
 
namespace SqlHelper {
	public class Cookie2 {
		/// <summary>
		/// 设置Cookie的值,关闭Session后释放
		/// </summary>
		/// <param name="name">名称</param>
		/// <param name="value">Cookie值</param>
		/// <param name="response">HttpResponse</param>
		public static void Set (HttpResponse response, string name, string value) {
			HttpCookie cookie = new HttpCookie (name);
			cookie.Values.Add (name, value);
			response.AppendCookie (cookie);
		}
 
 
 
		/// <summary>
		/// 设置Cookie的值,包含过期时间
		/// </summary>
		/// <param name="name">名称</param>
		/// <param name="value">Cookie值</param>
		/// <param name="expiredays">过期时间</param>
		/// <param name="response">HttpResponse</param>
		public static void Set (HttpResponse response, string name, string value, DateTime expiredays) {
			HttpCookie cookie = new HttpCookie (name);
			cookie.Expires = expiredays;
			cookie.Values.Add (name, value);
			response.AppendCookie (cookie);
		}
 
 
 
		/// <summary>
		/// 获取Cookie值
		/// </summary>
		/// <param name="name">名称</param>
		/// <param name="request">HttpRequest</param>
		/// <returns>Cookie的值</returns>
		public static string Get (HttpRequest request, string name) {
			if (request.Cookies[name] != null) {
				return request.Cookies[name].Values.toString();
			} else {
				return null;
			}
		}
 
 
 
		/// <summary>
		/// 删除Cookie
		/// </summary>
		/// <param name="name">名称</param>
		/// <param name="response">HttpResponse</param>
		/// <param name="request">HttpRequest</param>
		public static void Delete (HttpResponse response, HttpRequest request, string name) {
			HttpCookie cookie = request.Cookies[name];
			if (cookie != null) {
				cookie.Expires = DateTime.Now.AddDays (-1);
				response.AppendCookie (cookie);
			}
		}
 
 
 
		/// <summary>
		/// 修改Cookie的值
		/// </summary>
		/// <param name="name">名称</param>
		/// <param name="value">Cookie值</param>
		/// <param name="response">HttpResponse</param>
		/// <param name="request">HttpRequest</param>
		public static void Modify (HttpResponse response, HttpRequest request, string name, string value) {
			HttpCookie cookie = request.Cookies[name];
			if (cookie != null) {
				cookie.Values[name] = value;
			}
			response.AppendCookie (cookie);
		}
	}
}

C#访问数据库SqlHelper的封装及如何访问Excel

SqlHelper这名称代表一个库,用于访问数据库的简单封装。比如一个完整的数据库查询过程:首先创建链接,然后判断链接是否有效,然后创建查询参数列表,然后调用查询语句,然后处理数据,最后关闭链接。说起来就感觉这东西有点复杂,一般有经验的程序猿都从方便自身角度对SqlHelper进行一定程度的封装,简化对数据库的调用。每个玩过数据库的程序猿都有一个,我的长这样:
继续阅读C#访问数据库SqlHelper的封装及如何访问Excel