.net开发

C# Xml序列化Dictionary类

小柊 发表于 2017年09月16日 17时57分37秒

一、扯淡背景

本人一直有个习惯就是开发的时候把一些程序需要使用的后期可能会变动的配置做成Xml写到本地文件里,当每次程序启动的时候再读取出来,以免因为配置变动导致重新修改代码。

最近的一次更新调整中,需要在配置类中加入字典类Dictionary<TKey, TValue>。

结果不加不要紧,一加这个字典类,在序列化为Xml的时候直接抛出了异常:

浏览内容

Asp.net MVC 全局字符串参数过滤前后空白字符

小柊 发表于 2017年06月25日 21时15分27秒

序、扯淡

又是在不知不觉之中,一个月就这么过去了。这一个月里发生了挺多的事情,比如说大学毕业(虽然辣鸡学校扣了毕业证和学位证,最后只能申请延期毕业,这里的大学毕业仅仅是参加了毕业仪式罢了);工作一直不能稳定下来,现在的公司部门编制满了,如果需要转正就需要换部门,要么就直接换工作(我现在越来越偏向后者了);在这六月里,杭州也进入了梅雨季节,连绵不断的阴雨天气搞的整个人都没有心情和精神;拖欠辅导员的大学感悟一拖就是两个月,现在还在绝赞拖稿中……

唉……

 

一、背景

今天我们还是以一个案例切入,讲解一下Asp.net MVC中筛选器的实际使用。

空格这个东西真是让人又爱又恨,你说离了它不行,多了它也要出事儿。最近自己在开发自用的一套系统里,一次重置密码操作后,发现新密码怎么都登陆不上去,查了后台数据库,发现密码确实已经更新了,但具体密码被hash过了,看不到当时设置的新密码,后来突然想起现在的系统里已经布满了我的日志钩子,查了一下操作日志才发现当时提交新密码的时候手滑在密码最后加了一个空格……

为了在实际上线的时候不让用户发生这种问题,我们可以在使用参数前,先调用字符串参数的Trim()方法,去清除字符串变量前后的空字符串。不过随着项目越来越大,提交参数的地方越来越多,在每次使用参数前调用Trim()方法的做法明显不够优雅(我个人的编程优雅之道就是“用最少的代码做最多的事”)。那优雅的方法是怎么做的呢?

浏览内容

C# 正则表达式简单验证手机号码

小柊 发表于 2017年03月07日 23时39分41秒

老样子,废话少说一句话系列:

C#用下面的函数进行正则匹配:

#region 验证字符串是否为手机号码 + public static bool IsPhoneNumber(string phoneNumber)
/// <summary>
/// 验证字符串是否为手机号码
/// </summary>
/// <param name="phoneNumber">待验证字符串</param>
/// <returns>
/// 验证结果
/// <para> true  :输入字符串为有效的手机号码</para>
/// <para> false :输入字符串为无效的手机号码</para>
/// </returns>
public static bool IsPhoneNumber(string phoneNumber)
{
	return Regex.IsMatch(phoneNumber, @"^1(3[0-9]|5[0-9]|7[6-8]|8[0-9])[0-9]{8}$");
} 
#endregion

 

现在很多时候,网站都会需要用户提供自己的手机号码。不过很多时候用户会选择随便输入11位数字,如果去在提交时不及时发现,可能到时候就是白白调用一次短信发送接口。如果可以,我们后台开发者更希望能在用户提交时发现明显不合法的手机号码,从而阻止提交保存。那该怎么做呢。

浏览内容

老树新花——旧项目改善之浙师60周年庆,点亮全球送祝福

小柊 发表于 2017年02月28日 23时02分20秒

人总在不停地进步,可能若干年后回首看看自己多年以前开发的项目,可能或多或少会笑话自己当年是多么的年轻。最近无聊的时候翻看了一下自己以前的几个项目,发现有很多可以改进的地方。所以决定开一个新系列出来专门讲一下。

这次要讲的项目是去年浙师大六十年校庆的时候行知求知社委托我们计算机协会制作的一个“浙师60周年庆,点亮全球送祝福”的项目。

浏览内容

Asp.net MVC4 WebAPI启用Session

小柊 发表于 2017年02月22日 19时08分48秒

原标题:Asp.net MVC4 WebAPI Session总是为null的解决方案

一、背景

之前群里有位大神说,现在Web开发最好的结构就是MVC+WebAPI+AngularJS/Ajax,通过这样来降低后端对前端的控制和影响。

正好最近在整理一个项目的代码,这个项目原本有一个BackGroundController控制器,里面所有的Action返回的都是JsonResult,心里想想干脆就改成WebAPI算了。结果改代码改到一半的时候发现了一个问题:由于有个数据提交接口的代码做了防机器提交的操作,所以在执行的时候需要访问Session取得验证字符串。但在访问Session的时候直接被抛出了NullReferenceException。

经过检查,发现是HttpContext.Current.Session为null,才使得在这里抛出异常。

浏览内容

C# WinForm注册自定义协议

小柊 发表于 2017年02月13日 22时55分32秒

一、前言

自定义协议是什么?这么突然问起来可能不太会有人想起来,但如果给你看以下几个地址,你们应该会马上反应过来:

  • tencent://xxxxxxxxxx……
  • thunder://xxxxxxxxxx……
  • qqdl://xxxxxxxxxx……
  • aliim://xxxxxxxxxx……

浏览内容

C# EntityFramework连接MySQL数据库

小柊 发表于 2017年01月26日 11时17分04秒

ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。在安装完Visual Studio之后,可以在项目中右键添加新建项,选择“ADO.NET 实体数据模型”,然后走一个非常简单的向导就可以把Entity Framework添加进项目里了。

但实际用过EF框架的人都知道,默认情况下,实体数据模型向导里是没有办法连接MySQL数据库的。

浏览内容

Visual Studio 2015 诊断工具异常失败 解决方案

小柊 发表于 2016年09月18日 23时58分00秒

如果说Visual Studio 2015里有什么新功能是我最喜欢的,那我一定会说是新增的诊断工具,它可以在调试程序时追踪程序的CPU和内存使用率,如果在调试的时候看到内存使用量不断的增长,就可以判断程序中存在没有即时释放的资源,非常明显好用。

不过最近不知道为什么它启动不了了,每次启动调试的时候它只会显示一句“诊断工具意外失败。输出窗口中的诊断中心输出可能包含其他信息。

浏览内容

细说使用AForge.Video.FFMPEG的几个坑

小柊 发表于 2016年09月15日 19时09分18秒

一直觉得.net在多媒体处理方面渣得不行。最近需要做一个摄像头的程序,为了方便,用了AForge这个开源项目。AForge项目中有AForge.Video和AForge.Video. DirectShow这两个子项目,可以方便的调用摄像头。但是这两个项目最终只能取得视频帧,并不能保存为视频文件。经高人指点,AForge还有一个子项目AForge.Video.FFMPEG,它可以将图片压制成Avi视频格式。不过这个AForge.Video.FFMPEG在实际使用的时候会遇到不少坑,下面我将我在这次使用中遇到的坑分享给大家。

浏览内容

C# 全局异常捕获

小柊 发表于 2016年08月18日 13时28分07秒

开发界有那么一个笑话,说是“「我爱你」三个字,讲出来只要三秒钟,解释要三小时,证明却要一辈子。「Bug」三个字母,发现需要三秒,找到需要三小时,Debug却要一辈子。”。就算是资深的程序员也会写出Bug,但Bug并不可怕,重要的是在Bug发生的时候迅速定位Bug。

在Visual Studio中调试的时候,我们可以借助VS的调试工具进行调试,一旦出现未处理的异常时,VS也会在第一时间捕获并显示出来。随着开发的进行,终于程序要打包上线了。那么在上线之出了BUG我们该如何处理呢?

浏览内容

C# 可重载运算符

小柊 发表于 2016年08月18日 0时05分16秒

对于一个没接触过.net的Java程序员来说,在.net里最不适应的大概就是字符串之间的比较居然可以用“==”运算符。因为在Java里用“==”运算符去比较两个对象是否相等,是根据两个对象所在的内存地址是否相同来比较的。

那为什么.net就可以用“==”运算符来比较两个的字符串内容是否相等呢?原因就如标题所说,.net支持运算符的重载,也正是微软在写String类的时候已经帮我们重写了“==”运算符,我们才能通过简单的“==”运算符去比较两个字符串内容是否相同,而不需要去调用字符串的Equals()方法。

浏览内容

C# Entity Framework操作MySQL数据库乱码问题

小柊 发表于 2016年08月08日 16时49分39秒

废话少说一句话系列:

根据项目类型打开对应的config文件(app.config或web.config),找到连接字符串,加入“Character Set=utf8;”(不含引号)即可。

 

上一篇我们解决了Visual Studio 实体数据模型向导在选择完数据库连接后点击下一步就闪退问题,正式开始了EF框架操作MySQL的旅程。但好景不长,没过几天那个开发Java的学长就跟我反应数据库里有一堆全是问号的记录,看这写入时间,应该是我干的。

浏览内容

Visual Studio 实体数据模型向导在选择完数据库连接后点击下一步闪退问题

小柊 发表于 2016年07月22日 0时27分13秒

最近一直在做的一个项目,按设计是需要我将数据写入数据库,然后由别人的系统读出来,因为另外一边读出来的系统是Java开发的,而且代码基本成型,所以我这边就只能跟着他用MySQL了。

好在MySQL有推出.net的程序包,可以让EntityFramework支持MySQL数据库,具体的流程以后再细谈,简单地讲就是装MySQL for Visual Studio==>装mysql-connector-net==>获取EntityFramework、MySql.Data、MySql.Data.Entity程序包。不过我在实际的操作过程里发生了一件非常蛋疼的事情——在实体数据模型向导里填写好数据库连接设置后点击“下一步”按钮,实体数据模型向导就会直接闪退。

浏览内容

C# Asp.net获得当前版本及最后更新时间

小柊 发表于 2016年02月21日 22时33分45秒

有时候我们作为一个开发者,在开发自己的Web应用时,希望将当前的程序版本和最后更新时间打印在网页上,这样可以更加清晰的告知各位访客自己什么时候更新过网站程序,并且当前版本为多少。

浏览内容