在Webform (asp.net)中使用Route 路由之初级扩展

2012年9月7日 没有评论

在上一节,我们分享了如何实现基本的路由,可以满足很多的场景。

对于asp.net 稍微熟悉的同学一定不会对 Ashx 文件陌生,这是一个只具有代码逻辑的页面,通常用在验证码显示、文件下载等几乎没有用户界面的情况下。我就非常地喜欢使用这样的文件。

有的同学在对这样的文件进行路由的时候,会是这么来写代码,routes.MapPageRoute (“data”, “data”, “~/handler.ashx”); 编译一运行,我瓷熬,居然报错了。报错信息是什么呢?大致是这样的一条错误信息:类型“WebSite.Handler”不从“System.Web.UI.Page”继承。原因就在于常见的 aspx 和 ashx 虽然都实现了 IHttpHandler 接口,但是又不完全一样。

为了解决这个问题,其实这个问题也是我写这几篇文章最初的出发点,网上的代码基本上和上一节的差不多,并没有解决本节的问题。

我们在项目中新建一个类,取名 PageRoute,继承自 IRouteHandler 。在这个类里,我们只需要实现 IRouteHandler 接口就可以了。不多说,上代码。
#region IRouteHandler 成员

public string RoutePath { get; private set; }

public PageRoute (string routePath){RoutePath = routePath;}

public IHttpHandler GetHttpHandler (RequestContext requestContext)
{
if (!RoutePath.Contains (“.ashx”))
{
return BuildManager.CreateInstanceFromVirtualPath (RoutePath, typeof (Page)) as IHttpHandler;
}
else
{
return BuildManager.CreateInstanceFromVirtualPath (RoutePath, typeof (IHttpHandler)) as IHttpHandler;
}
}

#endregion

从代码里,可以清楚地看到,在 GetHttpHandler 方法里分别对 aspx 和 ashx 文件进行了处理,虽然返回的都是 IHttpHandler ,但是在转换的时候,设置的 typeof  是不一样的。

接下来,在 Global.asax.cs 里这么来写 routes.Add (“getdata”, new Route (“data”, new PageRoute (“~/handler.ashx”))); 各位同学们要记住这里的写法和上一节里的写法不一样喔。这样就可以实现对 ashx 文件的路由了,当然对于 aspx 文件,使用2种方式都可以的,例如 routes.Add (“user”, new Route (“u/{userid}”, new PageRoute (“~/userlist.aspx”))); 这样

是不是很神奇呀?

在这一节里,我们就完全解决了传统 webform 的路由实现问题,特别是不从“System.Web.UI.Page”继承这个问题。下一节我们来提一提再高级一点的用法。

分类: 日常 标签: , ,

在Webform (asp.net)中使用Route 路由之基本实现

2012年9月7日 没有评论

路由这个东西其实很早前就出现了,更多的是出现前其它的平台/语言中,对于 .Net 来说比较晚。那时很羡慕只需要在 apache 、ngix 中配置下就可以使用了。

我记得第一次近距离的使用是在门楼网里,那个时候屈屈把 Route 的这部分代码给剥离出来单独给我看过,使用了一个第三方组件,并且需要修改 IIS 的设置才能生效,缺点就是会接管所有的请求包括图片、样式等等。后来把代码消化后,用在了学校的新闻网里,没有想到5年多过去了这部分代码还在继续为师生们服务着。

再后来,微软推出了 MVC,到现在已经是第4个版本了。在 MVC 中,.Net 终于原生支持 Route了,但是在最开始还只是为 MVC 来服务的,网上也很多教程都是针对 MVC 系列的,我们这里就来讨论下如何在 webform 上来实现。

首先,需要在项目里添加 Global.asax 文件,在这个文件里要做的事情就是在应用启动的时候,添加路由注册信息到里面。

protected void Application_Start (object sender, EventArgs e) { RegisterRoutes (RouteTable.Routes);  }

然后在protected void RegisterRoutes (RouteCollection routes){routes.MapPageRoute (“default”, “home”, “~/default.aspx”);}里方法是这样的,什么意思,就是说你访问 /home 的话,路由会直接帮你转向到 default.aspx 页面去。

上面的方式可以满足最基本的需求,可是事实上很多情况下,url 地址里是有带有参数的,如何提交参数呢。可以这么来,routes.MapPageRoute (“notedetail”, “note/{userid}/{noteid}”, “~/note.aspx”); 从代码里可以发现,url 里附加了2个参数,分别为 userid 和 noteid ,它们用大括号给括起来了。看起来是不是有点像存储过程里的参数呢,哈哈。这个冷笑话一点都不好玩。

回到正题,再添加了上面的代码后,如果用户访问 /note/wave/1346 ,那么会被路由到 note.aspx 这个页面里去,在页面里接收参数可以这么来使用 string userId=Page.RouteData.Values[“userid”]; 就不再是传统的 QueryString 方法了。

至此,我们就实现了在 webform 中使用 Route 的基本功能呢了。下一节,我们来进行扩展。

分类: 日常 标签: , ,

小事故,丢人啊。

2012年8月20日 没有评论

昨天不小心出了点事故,骑自行车加速时把 olay 给弄掉下去了。

怎么说呢,我从学骑自行车开始,一次是小时候从墙壁险擦过去,一次是2、3年前某个雨夜摔了一下。应该算是幸运的,可是昨天把人家给弄得掉下去了。分析来看,应该是在加速的时候,车子摇摆,重心不稳,人家没有坐好结果就掉下去了,但是掉了一半似乎又被什么给挂住了,在地上给拖了一下。

当机立断,立马把车子给扔了,小腿被踏板给撞了下,一瘸一瘸地跑过去。左边胳膊和腿都擦伤了,雨伞也坏了,衣服倒还没有擦破。

回家后擦酒精,上碘酒。

真丢人啊,路面平坦的很。自己骑车给弄成这样。该怎么赔偿就怎么赔偿吧,诶哟喂。

分类: 日常 标签: ,

Windows 8 RTM 使用初印象

2012年8月2日 没有评论

window 8 已经RTM ,并在8月1日前发布给各OEM厂商了。从刚开始的时候,几乎每个版本都有在安装使用,这次通过内部服务器下载回来了,同时也拿到了一个新的还未上市的笔记本,因为是裸机,使用 u盘安装。

我觉得奇怪的是,无论我买多少 u盘,最后都会莫名其妙的不见了。

这次只好又重新买了一个 16G 的,等了几天今天下午的时候终于到了,网上找了个软件,做了个u盘启动盘,装了个win8英文版的系统。

安装过程、界面和以前的一样的,没有什么大的变化。感觉安装时间比以前的要长。进入系统后,查看版本号为9200。

skydriver 的图标,和以前传闻的一样,丝带给取消了,只剩下2朵白云,store 商店也可以正常访问,map 定位还不错。进入系统后,系统可以自动记住我先前设置的桌面背景、浏览器默认主页、用户图像,这些很个性化,赞一个。

过了不久,我邮件和手机短信都收到微软信息要求确认新机器,安全性有很大的提升。

其实,我更关注的是 VS 2012 ,可惜现在还没有 RTM 。

分类: 一句话 标签: , ,

北京下大雨

2012年7月23日 没有评论

上周六的时候,去了一个叫做洼里乡居楼的地方吃饭,那是一个类似农家乐的地方。从地铁出来,开始找郊100的站台,后来没找到,于是手机搜索其它的路线,好在有个945路公交。坐到大柳树(环岛)下车,又找了个麻木,给送到乡居楼,20块钱。这个麻木师傅还不错,挺能说的,约好了回程的时候也去找他。那个郊100,真是见鬼去吧,百度地图这次不靠谱呀。

话说在公交上,我有看到航空博物馆,前几天在马蜂窝上也看到有这个景点的,说是门票80一张,下次有机会我要去航空博物馆看一看。

到乡居楼的时候就已经开始在下雨了,里面吃饭的人不算很多,不过也不少。听麻木师傅说如果是晴天,这里吃饭都得排队。那个什么鸡肉分量很足,其它的一般般。吃饭完,就四处晃荡,看到他们自己的养鸡场,北京油鸡是98块一只。市场里活鸡估计也就20、30的样子吧。

简单看了下地图,往游乐园方向去。门票一个人是20块。进去后,首先就是过独木桥啊,爬木墙啊,荡绳啊什么的,主要是下雨天,简单地玩了下,就开始下一波。在路上有看到行人拿的荷叶,很久没有看到自然状态的荷叶了,心里还在琢磨是哪里来的。不久就来到了那个池塘,池塘里还有几个小木舟。水边的荷叶都被摘光了,费了好大功夫摘了个荷叶。

正往前走,雨就开始下大了,恰好荷叶可以排上用场。看到有个乡村动物园,就去瞅了一眼。什么骆驼、牦牛、兔子、鹅、野猪、牧羊犬、山羊、松鼠、鸭子、鸵鸟、澳洲鸵鸟、鸽子、梅花鹿、野鸡……其它的不记得了。

雨越下越大,看到旁边有温棚,就赶紧跑进去,原来是个类似盆景展览的地方。一时也走不了,就在一起打了几圈斗地主。雨是越来越大,这个温棚开始漏雨了,地面都开始漫水了。我们又换了个温棚,恰好是个西红柿采摘的,我们就进去了,一边摘一边吃,最后买了几斤。注意喔,西红柿可是8块钱一斤咯,相对市场可是贵了很多。

买了西红柿我们就直接出来了,那什么西瓜采摘、游乐场什么的都没有过去,只去了一半的面积吧。打电话叫上午的麻木师傅过来接我们去坐公交,这个时候我已经湿身了。在公交上我把T恤给脱了,盖在前胸,一路到地铁。

出了地铁,雨下的更大了。狂奔回家,小区里都是水,快到膝盖了。我相信很多别的地方应该也是这样的。

回家,喝几大口白酒,洗热水澡,煮可乐姜汤。好在没有感冒,但是目前我还不知道是否会落下什么后遗症。

好在第二天是个晴天,去了后海晃了一圈,走的累死了。

分类: 日常 标签: , ,

糗事1.3.4新版本发布

2012年7月9日 没有评论

糗事的这个版本拖了起码有个4个月了,一直都没有更新功能,这个周末给弄出来了。我在各个后台上传新版本时遇到各种奇怪问题,进入后台里面居然显示的是别的开发者的内容。

好在从上个版本开始,我为程序添加了自动更新功能,可以先走程序的更新功能。数据报表情况要等到明天才可以看到。

看到@屈屈 和 @welefen老六 都换 iPhone平台了,看来这糗事的 iOS 版本也得加快进度了。

分类: 日常 标签: ,

很受伤

2012年7月4日 没有评论

前几天连续下了好几天的雨,然后这几天又是持续的高温。

先是觉得某一处牙龈疼,然后是上火,接着是口腔溃疡,喉咙里似乎总有一口痰。

Olay 的同学来北京找工作,我就睡客厅了,谁知道今年居然 N 多蚊子,脸上、胳膊上、肚子上、脚上全部都被咬了。来这里几年了,几乎都没有看到什么蚊子,今年居然一下子全部跑出来了。

昨天居然又给弄感冒了,大热天的感冒,那叫一个难受,谁感冒谁知道。

像我这样很少生病的人,天气异常一下就不舒服了,看来熬夜还是伤身体呀。

半夜的时候还郁闷了下,在沙发上翻来覆去地生气,搞到早上都没有睡着。

很受伤,我要疗养下。

分类: 一句话 标签: ,

控制面板设备和打印机选项卡无法打开解决方法

2012年7月1日 没有评论

这周五上班的时候,走的比较急,公交卡和鼠标都忘记在家,在路上想起来,幸好单位放了N久前买的 罗技M555b蓝牙鼠标。

到单位使用的时候,发现无法连接配对,从托盘区域点开蓝牙,选择 显示 Bluetooth 设备,然后无法打开,刷进度条很慢,到98%的样子就会一直停留在那里。以前鼠标明明是可以使用的。

干活重要,好在单位还有台式机可以使用,就把这事情放下来了。

后来无意间发现需要在服务里启用 Bluetooth Support Service 这个服务的,启用后就可以顺利打开设备和打印机选项卡了。

不过我最原始的问题依然没有解决,蓝牙鼠标还是发现不了,魅族M9也无法通过蓝牙发送文件,iPhone4 蓝牙也配对不了,按照网上的说法,选择属性,去掉 wireless iAPI 没有效果,报告找不到元素错误。

分类: 日常 标签:

那些年,我们用过的电脑

2012年6月20日 没有评论

上周的时候,电脑突然不能用了。一开机发现硬盘灯都不亮了。

把我给急死了。

一来是因为半夜呀,电脑不能开机影响第二天工作。二是因为正准备玩游戏的。电脑都是次要的,大不了再咬牙分个期换个机器好了,主要是数据重要嘛。

反复尝试很久都不行,每次都强制关机的。后来突然想到 olay 的机器,于是把我的硬盘换上,可以正常开机了,看来不是我硬盘的问题。那么接下来就是主板或者屏幕的问题,不过这个不是我简单地拆开就可以解决的。

想到周末的人会很多,周五的下午我就抽时间跑了一趟中关村。电脑自然是要放那里检测的,把硬盘带回来了,我可不想因为任何原因火。

因为恰逢是个周末,在家用 macbook,这悲催的电脑总是提示“WI-FI硬件未找到”,上不了网,各种物理的、软件的、暴力的方式都试过了,都没有效果。要怎么形容这个macbook 呢~

看时间才4点不到呢,于是先把自己的散热板给拆掉了,清理里面的灰尘。安装完后发现有点噪音,开始的时候那么多灰运行时都安静的很,被我一打扫,反而有声音了。

然后又把于总的 T43 拿出来折腾了,这个机器已经很久没有用了。刚开始的时候都开不了机了,充了会电才好,说是系统反应太慢,还有一个bug 就是莫名其妙地失去响应,那就重新安装一个系统吧。

安装完系统后发现问题还是没有解决,在网上搜索了下拆机图,把 T43 给拆开了,里面好多灰。正在清理的时候,olay 跑过来凑热闹,一脚把地上的螺丝给踢不见了几个。

安装回去后发现系统开不了机,就算开机进入桌面有时候触控板也无法响应。后来发现如果使劲按着掌托区域,就正常的。可是老要使劲按着也不是办法,后来发现在右下角垫个东西例如螺丝刀什么的,就可以了。

后来有反复拆装过,终于面板被我给弄裂了一处。

受到影响的莫过于糗事的不能正常更新,用户的反馈让我有点内疚呀。好在周末的时候通知我可以去取机器了,大中午的时候跑过去把机器给拿回来,说是换了块主板。

这周一的时候,晚上机器特别的烫,散热板不是有开着的嘛,后来发现散热板根本就没有运行,我还以为是上次拆散热板给弄坏的,把线插到别的插口又可以了,换手机充电也没有反应,看来是那个 USB 接口坏了。我在拆后盖的时候,散热风扇一下子掉了出来,我那个去,不拧风扇螺丝。

周二的下午又跑了一次中关村,感觉真扯呀。

他们又说把机器给留下来,我坚持要等一等,让跑一下看结果什么情况。等待了一个半小时候,终于有结果了,原来是上次给我换主板的时候,USB 的那一小块电路板在集成的时候没有插紧。我的大脑里就剩下一个英语单词,你们懂的。

按说这次拿回家了应该没有什么问题吧。发现无线不能用了,找不到热点,但是设备管理器里是有这个硬件的。网上搜了下,一看是无线硬件开关没有打开,好吧,给打开后还是无效。禁用重新打开也无效,网上有人说也有同样的问题,说 Fn+F5 也没效果,我试了下这个功能,终于发现原因了,把这里无线的软开关打开后,终于可以上网了。

回家后正在吊儿郎当地看网页,突然发现少了个东西。有的同学可能知道,在读卡器插槽那里在不用的时候是有个塑料卡片放在里面的,现在就是那个卡片没有了。今天给客服打电话,后来说是给我再找一个,然后快递过来。

看明天情况吧,不知道会是什么样的杯具。求安慰呀~

分类: 日常 标签: ,

你懂的~

2012年5月18日 没有评论

其实你懂的

分类: 一句话 标签: