DTcms4/5中使用HttpModule将http访问301重定向到https

前面虽然讲过SSL在IIS开启的几种方式,比较常见的Microsoft URL Rewrite Module修改Web.Config如下:

<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>

但在DTcms中,本身已经用了自定义的HttpModule,可直接利用其写法来方便地实现支持。打开Web.UI下的HttpModule.cs,增加如下判断,可选择301跳转,也可直接跳转。

代码如下:

//开启SSL访问开始

string oldUrl = ((HttpApplication)sender).Request.Url.ToString();

if (!oldUrl.StartsWith("https://"))

{

string newUrl = oldUrl.Replace("http://", "https://");

//301重定向

((HttpApplication)sender).Response.StatusCode = 301;

((HttpApplication)sender).Response.AddHeader("Location", newUrl);

((HttpApplication)sender).Response.End();

//直接重定向

//((HttpApplication)sender).Context.RewritePath(newUrl);

}

//开启SSL访问结束

我一直很喜欢写程序,你呢?

我是1999年上大学的时候才接触计算机,那时候上网还叫“冲浪”。第一次去学校的机房,视觉、身心被震撼到,深信计算机的未来很美好,于是基本来放弃了本专业(电气工程及自动化),大部分时间都用在了计算机方面的学习,最初对计算机硬件及网络感兴趣,本来打算在盯着这个领域发展的,还因此去读了MCSE,CCNA。但是后来学了C语言,学了SQL,考了MCDBA,就发现还是喜欢编程,从硬变软了。 

记得当初C语言考了90多分吧,算是高分。当时流行考计算机等级考试,我是考了C语言二级之后,又去考了QBasic,后来学什么网页三剑客,做网页,学html javascript,学SQL,还有flash的Action Script写东西。大三学汇编(必修课),大四的时候把计算机等级考试的四级也过了,这个4级对计算机系不算什么,但对我们学院,我就记得我们那届全院就我一个过了。 

2003年毕了业之后呢,虽然也做网络工程师的硬件、网络方面的工作,但后面还是写网页比较多,当时用的是Asp,使用vb script语言写的。

2004年的时候跳槽,获得Web Developer的职位,主要是内部OA开发,基于Asp+MSSQL,2005年还去研究一个类似于java的语言Coldfusion,当时还索性把他的coldfusion.cn域名注册了,等到现在也没见到Adobe来收购。同期开始接触ERP,开始熟练使用Access+sql+VBA。 

2005年下半年换工作,还是以开发为主,不仅有Web开发,也开始做BaaN的4GL开发。大概2008年开始,从VS2005升级到VS2008,开始转向C# .NET,就这样一路走到今天。 

虽然近几年很多日常工作是实施上线、技术支持、项目管理方面的,但是业余时间我还是一如既往的热爱着编程,从企业软件到电子商务,再到移动互联网开发,一直不停的坚持着。

我觉得喜欢写程序的一个原因是:太懒!发现周围的一切效率低下,就希望通过写程序来解决。在解决实际问题的同时,也一直努力提高开发效率,节约时间,让生命少一些加班,多一些色彩和可能。

但事实上绝大多数开发团队、开发成员的开发效率普遍低下,大部分时间并非用于关键的开发,而是浪费在重复工作等毫无意义的事情上。于是3年前,我开始将我自己的想法、结合几位老师(吉日嘎拉等)的经验,积累出一套经受住实战考验的开发平台和开发辅助工具:旺财C# .NET代码生成器,近日拿到了软件著作权,终算有所小成。

2016年开始,我将代码生成器扩展支持当下国内最流行的C# .NET开源CMS:DTcms,在淘宝开店并销售,积累了几十位付费用户,同时积累了一批有相同理念和价值观的程序员、软件老板朋友。

因为互联网领域Java比.NET更受欢迎,我会因此去关注、学习一些Java基础,也会关心一下Python等大数据领域的流行语言,但.NET一直是我的最爱,我觉得我会一直喜欢下去。

DTcms4/5远程图片自动保存报错:A generic error occurred in GDI+.

玩了很久DTcms,今天居然在保存远程图片到本地时,报了错误:A generic error occurred in GDI+.

以下是第一版,没有自动创建这个myfolder目录

var htmlSource2 =new JumonyParser().LoadDocument(url).Document.Find("#CPHMain_gvPartSearch_img80_0 > img");
foreach (var htmlElement in htmlSource2)
{
   //保存图片
  string upLoadPath = sysConfig.webpath + sysConfig.filepath + "/myfolder/thumbnail/";
  //站点目录+上传目录
  string fullUpLoadPath = Utils.GetMapPath(upLoadPath); //上传目录的物理路径
  Thumbnail.MakeRemoteThumbnailImage(htmlElement.Attribute("src").Value().Trim(),fullUpLoadPath + model.pn + ".jpg", 300, 300);
  html += string.Format("<tr><td align=\"center\">photo</td><td>{0}</td></tr>",htmlElement.Attribute("src").Value().Trim());
}

第二版增加了自动创建目录

//检查上传的物理路径是否存在,不存在则创建

if (!Directory.Exists(fullUpLoadPath))
{
    Directory.CreateDirectory(fullUpLoadPath);
}

还是报错,后来发现时目录的权限问题。

砍价既浪费时间又伤感情

周日睡了个午觉,中饭也没吃,醒来发现微信好友邀请和旺旺留言,一个很爽快的买家,饿着肚子给他回复、发程序、发货、发红包。

而今天上午,另一个兄弟,明明写得很清楚,还问价格,还说贵,还要开源,开个头呀开,于是被我打发了(也可能对方主动不理我了,哈哈,无所谓啦)。碰到这种人,真想问候他妈。你写个1块钱,他可能都觉得贵。有能耐自己去写,有本事自己花时间捣鼓一下试试。

免费的是最贵的:因为免费的你不珍惜,可能就丢在角落了;付了费你珍惜了,才收获了真正想要的东西!

砍价既浪费时间又伤感情,请勿砍价;

价格不是第一要素,质量靠谱才最重要。

近几日淘宝店引发的感想

有想法就要有行动

细心的朋友应该能看到我博客右上角的淘宝店链接,没错开了很久了,还付了1000块保证金。DTcms带来了的订单和客户最多,现在旺财系列的代码生成器是主力。其实本没想通过这个弄个皇冠店啥得,只不过觉得好玩,什么都想玩一玩,尝试一下,不做空想家。

没耐心的人不少

不少人旺旺留言,咨询问题,我觉得写得够详细了,并且在宝贝描述里写了我的手机、微信、QQ等,还特别说明旺旺不常看。可惜还是有那么多人,不仔细看,对我来说这个损失很小,但真正需要的人,那就是大损失了。我有时候觉得自己很没耐心,可是发现网上比我还没耐心的人更多。

沟通态度特别重要

昨天有个兄弟很晚了,通过旺旺留言、加我QQ留言,还给我发短信,还加我微信,就想要以前asp写得团队任务管理系统,看到我图片有个优惠价10元,希望来一套学习研究。本来我拒绝了,因为曾经10元卖过一套,后来退款了,被买的人骚扰烦死了,写得很清楚技术支持需要2份,钱就付了10元,就想要本来200的服务,怎么也得付110吧,买家不自觉,我直接退款了,源码白送了,远离垃圾。后来这位朋友的沟通,让我觉得懂得彼此尊重,一高兴就从100块直接改为10块钱了。虽然钱少了,但开心。难道我真的很需要这100快吗,没有也可以,而因此换来开心,换来在对待技术、对待交易有相同理念的朋友,收获更丰盛。

同样一个反例,是关于以前写过的Flowportal的手写签名插件,此人前几天就联系我,后来问了问题不会,忽然又联系我,总是问问题,拒绝回答我的提问,上来直接被我拒绝了。但对方不折不挠,反复问要看演示,又是说要外包开发,我道出1万起的标准,对方还不停追问,被我言辞激烈的拒绝了。沟通最起码有个前提,及时响应,谈得话题大家都清楚,自己不懂技术,上来就问一些无关紧要,还不介绍自己的情况,浪费时间,浪费生命。

发一下截图,大家自己看吧。

感谢青岛老乡Mr.Zhang的支持

昨天晚饭的时候看到手机淘宝的消息后,让我至今还在兴奋中。无意间的行为,至今依然能带给别人带来帮助。

持续的创造价值,对未来有信心,对价值回报有信心:日复一日的辛苦付出与积累,终将获得有缘人的认可。

截止到今天DTcms动软三层模板已卖出超过15份,下一步计划,将后台管理的List、Edit/Add页面的模板也丰富起来,完善并支持即将发布的DTcms 5最新版。

快速开发必备:代码生成器

开发程序那么久了,真正使用代码生成器是近3年的事情,由衷的感觉到这东西真的是提高生产力!

最早的时候开发,还是用asp,那时候就是傻傻的弄好一个页面(代码和页面是混合的),复制成另一个文件,然后用DreamWeaver替换关键词(表名、描述啥的)。后来知道了动软代码生成器,那时候主要还是用asp,也捣鼓了一下生成asp代码,不过发现.net的强大后,就开始学习简单三层写东西了。说实话,动软的那个直接生成项目的功能的确没啥实际作用,最实用的就是生成三层的dal,bll,model,页面部分还得自己定制。

再后来就是学习吉日嘎拉的.Net开发平台,开始用他的代码生成器,买了源码之后用在公司OA项目上之后,就开始定制自己的代码生成器,基本上来一个需求,三下五除二就搞定了核心。

接着研究DTcms,索性写了基于动软的DTcms代码生成模板,后来淘宝上还卖出了好几份!让我看到了想偷懒、想追求效率的程序员挺多。

其实吧,VS就是一个生成器,用MVC模式或者EF的时候,很多代码都能自动生成,异常强大,但是很多时候,我们写代码还是要结合业务,还得服务客户,就得有界面!所以功能部分是后台的话,界面的部分就需要精心打造,但是界面部门的代码生成是否可行呢?我觉得肯定可行啦!

目前我正在基于吉日嘎拉的代码生成器源码,写一个自己的代码生成器,不仅生成后台代码,前台的页面,漂亮的界面,相应的ashx、webapi也一起生成了。核心的功能如下:

1、根据数据库结构生成代码,支持MSSQL,MySQL,Oracle

2、自动生成实体类

3、自动生成增删改查业务类(没有DAL了,直接用吉日嘎拉的DotNet.Business)

4、自动生成列表、查看、增加、编辑页面

5、界面基于BootStrap(暂定ZUI)

6、自动生成ashx文件,并自动生成权限控制代码

7、自动生成权限配置的SQL,便于后台管理权限

8、整站基于jQuery+Ajax(layer定制)

 

高效自动代码生成的一瞬间很美好,但要写出背后的模板(规范、可用的),可能需要几天或几十天的不停打磨,完善。感兴趣的朋友,加我微信或QQ交流。

DTcms扩展字段的使用小结

前台模版-文章列表:{dr[author]}

前台模版-文章内容:{model.fields[author]}

后台CS文件:model.fields["author"].ToString()

后台编辑赋值是字典的形式

Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("good", "1");
dic.Add("author", user.user_name);
model.fields = dic; //扩展字段赋值

 

给DTcms4加上自定义404报错页面

因为老婆的印迹巴士摄影工作室www.ingbus.com打算从asp版改到asp.net版,以前从零开始敲asp代码,现在实在不想再从零开始,于是选择DTcms开源版搞一下升级,但是因为这么一升级,就会有很多页面没有了,所以必须自己增加404页面,告诉用户(特别是搜索引擎),我们改版了。

 

其实实现的过程很简单,使用customErrors本地测试很快就搞好了,但是发布到阿里云之后,居然没效果。

<customErrors mode="RemoteOnly">
   <error statusCode="404" redirect="404.htm"/>
  </customErrors>

 

于是百度了一下,现学现用,使用《关于IIS7.5下的web.config 404 配置的一些问题》 搞定了,别的不多说了,你直接弄一个404.htm页面放在根目录,然后再加上如下代码到system.webServer就行了。

 

<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404"/>
<error statusCode="404" path="/404.htm" responseMode="ExecuteURL"/>
</httpErrors>