分类 默认分类 下的文章

C#程序断言运用

后台接口程序特别是写流程的时候,非常容易出现不易察觉的bug,
很多时候,我们一整天的功能可能就是找出某一个很诡异的bug,最终发现只是改了一句代码而已...

类似的教训告诉我们,平时写代码的时候,要注意暴露错误..
那么断言及抛异常就派上用处了.

C#中断言主要方法:System.Diagnostics.Debug.Assert

一般来讲,对外界传参规范性一般用抛异常去抓取到.
断言则用来规避程序内部流转的变量值有错.特别是调试的时候,如果断言返回false,程序会跳出一个弹窗让你确认,点击重试后,你可以直接跳转到那条语句进行调试.
这个小技巧在平时写代码的时候,特别是循环之类的,可以通过System.Diagnostics.Debug.Assert(i!=8);来很方便的跳转调试

注意:断言处必须尽量写清注释,一般一开始断言都不可能报错,都是后面隐蔽处才会跳出错误.
当在你的程序里存在着各种断言语句时,那么你的程序错误将无处可藏.

倒计时超期图标制作

前端时间美工有出图做一个事件还剩时间的动态图标.
因为页面是在首页,希望可以动态改变剩余的时间,效果如下图:

倒计时图片

这功能的确挺让人眼前一亮的,于是想分享一下当时自己写的框架.
框架是基于canvas去做的.

先给个源码demo链接:
动态倒计时图标

demo效果:

demo中的common.js是一些简单的时间处理函数,其他地方抄来的,我很多地方都会用common.js就不细说了.

框架源码里有几个常量说一下:

  • var CANVAS_WIDTH = 64; 定义绘制图片的canvas的宽高,最终图片会是拉伸状态,最好是和最后生成的图片宽高相同.
  • var FONT_SIZE = 13; 绘制图片上的文字字体大小,这个是和宽高联合调整的,宽高大了,字当然也要相对调整大.
  • var CLOCK_FONT_SIZE = 10; 这个是画时钟里面那个字的大小(本人写的是 "超" 字,时间超了后会显示)
  • var IMAGE_COLOR_ARRAY = [{overValue:,color:},...] 这个数组是定义剩余不同时间,时钟所显示的颜色.要按照overValue降序排列,第一个必然是overValue=null,
    表示默认显示颜色.

程序框架默认剩余分秒状态下会自动更新,超过1天的状态就不更新了,如果有需要也可以把超过1天的状态的也加入更新,更新位置在下面函数过程中,比较简单,就不多做说明.
程序返回一个毫秒数,在setTimeout函数中会调用.

//下一次更新图片的时间.
function nextUpdateTime(timeObject) {
    var obj = timeObject;
    var sDate;
    var num;
    if(obj.day != 0) return 0; //不用更新了.

    if(obj.hour != 0) {
        //未验证,应该没问题,如果有问题改成1分钟刷一次好了
        var s = obj.minute % 3600;
        if(s < 0) s = 3600 + s;
        if(s == 0) {
            s = Math.abs(obj.hour) > 1 ? 3600 : 60;
        }
        num = s * 1000;

    } else if(obj.minute != 0) {

        var s = obj.second % 60;
        if(s < 0) s = 60 + s;
        if(s == 0) {
            s = Math.abs(obj.minute) > 1 ? 60 : 1;
        }
        num = s * 1000;

    } else {
        num = 1000;
    }
    return num;

}

发现什么问题的,欢迎联系作者邮箱^_^

简单封装的一个圆形显示进度条的canvas动画

紧张的10月份过去了.虽然11月份仍然很紧张,不过还是想做点自己想做的事情.
时间不多,我的坦克大战小游戏依然没有时间继续开发.今天用canvas封装了一个圆形进度条显示.

先给个demo链接地址:http://demo.fengyitong.name/circle_total/

圆形进度条

代码就不多说了,demo里面可以直接下载了看,代码加上空格数,注释数撑死也才200行....

效果还是不错的.

调用也很简单:

        var cx = new $.CircleAnimate({
            el: doms[i],
            maxValue: 255,    //最大值
            value: 0,        //当前值
            color: "#fff", //外圈底色
            colorAlpha: 0.8, //外圈底色透明度
            outColor: "red", //外圈颜色
            outAlpha: 0.5, //外圈透明度
            outRadius: 0.5, //外圈内半径比
            innerColor: "rgb(255,255,0)", //内圈颜色
            innerAlpha: 0.7, //内圈透明度
            innerScale: 0.5, //内圈半径比例
            speed: 4, //速度.(每次加减值大小.)
            fontColor: '#000' //字体颜色.
        });

接着封装了一个简单的cx.setValue(150); 来实现圆的动画效果.
性能应该还可以,毕竟是canvas原生封装的.
废话不多说了准备睡觉.喜欢的人可以自己下载代码.

AuthorizeAttribute权限配置入门

十月份做一个项目忙傻掉了.....

趁着10月还有最后一天,写个文章,虽然已经很懒了,但是一个月一篇都不写总说不过去....

做webapi,绕不过的肯定是验证机制,权限的管理很麻烦,.net帮我们集成了一个验证标签AuthorizeAttribute,用起来很方便

他里面可以通过给页面或者请求接口标签[Authorize(Users,Roles)]
加Users或者Roles权限,来实现自动给配置.
不过这个看看就过去吧,这样配意味着很难维护了.想加个角色,配下权限还要改代码..
可以自己写一个验证继承AuthorizeAttribute标签:
他下面几个方法要重写:
OnAuthorization 当用户访问请求时调用,他内部会调用IsAuthorized去验证是否合法.

IsAuthorized 这里就可以通过权限表去验证,返回true即请求合法,否则不允许请求

HandleUnauthorizedRequest 这个也可以重写一下,当IsAuthorized返回false的时候,会执行该方法,该方法可以返回401要求验证或者直接返回登录页面.