解码Unicode编码字符
解码Unicode编码字符,如将 \u82f9\u679c
解码为 苹果
。
- 阅读全文 -
解码Unicode编码字符,如将 \u82f9\u679c
解码为 苹果
。
- 阅读全文 -
枚举类型一般情况下多作为描述性质的参数,我们可以组合不同的属性到枚举之中,而且可以很容易地从枚举对象中读取出是否包含指定的参数(开关)。
枚举参数的好处是可以将多个选项值存放到一个变量之中,减少存储空间。
因为在.NET中,一个布尔值(Boolean
)就占用4字节,而一个四字节的Integer
可以存储高达32个选项开关!
- 阅读全文 -
今天修改了一下自己以前写的程序,然而在POST数据时却发生了“基础链接已关闭”的奇怪BUG,调试了半天也没有发现原因。
Dim request As HttpWebRequest = WebRequest.Create("https://xxxxxxx/api")
request.Proxy = Nothing '关闭代理,否则速度巨慢无比
request.Method = "POST"
Dim postdata As String = "POST数据..."
Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postdata)
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = byteArray.Length
Dim dataStream As Stream = request.GetRequestStream() '在这里发生错误
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim response As HttpWebResponse = request.GetResponse()
' ...
后来Google了半天,发现可能是默认的安全协议类型 SecurityProtocolType
错误,SecurityProtocolType
为ssl3
+tls1.0
协议。SecurityProtocolType
的枚举类型中并没有其他协议的参数,只好由我自己查询枚举值,再手动设置到 ServicePointManager.SecurityProtocolType
的全局属性之中了!' 因为此属性乃是全局属性,只需在使用WebRequest前执行此代码即可
Net.ServicePointManager.SecurityProtocol = 48 Or 192 Or 768 Or 3072 'Ssl3 Tls Tls1.1 Tls1.2
' 貌似用这个参数可以使用系统内最新的安全协议?
Net.ServicePointManager.SecurityProtocol = 2147483647
' .net 4.7以上采用的是系统默认,似乎也是最新的安全协议?
Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault
如果还是发生错误,或者用户的机器显示无效的安全协议,表明该机器需要更新.NET框架补丁:- 阅读全文 -
某些静态资源(如图片、字体、JS库、CSS样式表等),并不需要经常修改,我们便可以通过传递Cache-Control
Header让浏览器客户端将这些资源加入到本地缓存中,当用户下次浏览时便可直接通过缓存加载资源文件,而不需要重新下载。
在Apache服务器中设置数据缓存,其实只需要通过 .htacess 文件即可完成,非常的简单!
- 阅读全文 -
在 .NET 中,有引用类型与值类型两种对象类型,而其中值类型是“不可空”的类型,比如你设定一个int i = null
,那么它会使用默认值0
来为自己赋值。
然而有些时候,我们需要一个可空的值类型(比如数据库中的可空字段),那么该怎么办呢?
- 阅读全文 -
在C++中,有一种类型名为联合体(亦称共用体),关键字为union
,它与结构十分类似,但是它所有的数值全都指向同一个指针。也就是说,当你修改联合体内的某一个数据时,其他数据也会同时改变。
这个类型的好处,在于可以存储某种不确定的数据对象,等到稍后再来分析出该对象的用途。
union MyUnion
{
char b; //单字节整数,在c语言中用char类型来表示单字节整数
short s; //双字节整数
int i; //四字节整数
}
而在 .NET 中,却并没有 union
这个关键字,是不是 .NET 就无法使用联合体呢?- 阅读全文 -
使用数据压缩技术,可以让服务器在传输数据之前进行简易的压缩,让客户端更快地接收数据,降低数据传输的流量。
不过这个功能仅在文本数据中比较有效,而像是图片、音视频等多媒体文件本身就已被压缩过,再压缩只是浪费服务器的运算资源而已,不建议使用!
目前主流的浏览器都支持gzip和deflate两种数据压缩算法,而在Apache里指定数据压缩功能,只需要在.htaccess写入以下代码即可。
- 阅读全文 -
如果有一个双等号结尾的非法BASE64编码作为参数(如abc==
),.NET的 Convert.FromBase64String 函数不仅不会报错,反而还会产生一个意料之外的返回值,对后续程序的执行是一个隐患。
详细资料请参考 https://detunized.net/posts/2019-03-06-base64-decoding-bug-that-is-present-in-all-version-of-.net/
经过我个人的测试,我发现这个BUG仅影响 4.0 以上的版本,反而 2.0~3.5 可以正确发现参数异常,并予以报错。
另外据说最新的 .NET Core 也已经修复了这个BUG,所以请使用 4.0 作为开发框架的童鞋们“注意安全”。
原文给出了一个 .NET 4.7.2 的内部解决方法
// This only works for base64 without spaces or linebreaks.
string Repad(string base64)
{
var l = base64.Length;
return l % 4 == 1 && base64[l - 1] == '='
? base64.Substring(0, l - 1)
: base64;
}
不过总觉得哪里有一点不对劲,哈哈~- 阅读全文 -
.net 默认的WebBrowser控件有时候并不能拦截所有的URL跳转(比如Flash跳转),而本站所提供的 WebBrowserExt 控件则可以拦截所有的跳转事件,并且还可以屏蔽IE内核点击链接时的跳转声。
具体的用法:先复制下面的代码,然后按F5编译运行一次程序,就可以在控件工具栏中找到 WebBrowserExt 控件,拖放或者手动实例化这个控件即可。
新的拦截事件位于 BeforeNavigate
、BeforeNewWindow
这两个事件中,禁止跳转链接声位于 DisableNavigationSounds
这个属性中!
详细代码:
- 阅读全文 -