词条统计
浏览次数:5588 次
编辑次数:8次 历史版本
最近更新:2013/6/20
创建者:掷鸡蛋者

本文来源:http://www.wojilu.com/forum1/topic/58?


简单一点说,web程序就是客户端(比如浏览器)发送请求给服务器,然后服务器返回字符串而已。但事实上,这个过程往往变得复杂无比。

现在让我们尽量简单的来看看,服务器和客户端的交互,一般需要用到哪些基础资源。

在.net中,服务器端需要用到的基础资源,基本上全部被包装在 HttpContext 对象中,通过 HttpContext ,你几乎可以完成任何复杂的程序。

HttpContext 封装了哪些数据呢?我们看一下 MSDN它的属性列表:


其实,其中最常用的属性是 Items 、Request 、Response、Session、Server 等对象。

这也就是为什么你自定义的 Handler,通过实现 IHttpHandler 接口,从而获取 HttpContext 之后,就可以完成整个应用请求。

看一下 wojilu mvc framework 的核心 Handler,即 CoreHandler,如下图所示:

在 wojilu framework 中,进一步对 HttpContext 进行了封装,以 WebContext 的面貌出现。这样做并非觉得微软的封装或接口不好,而是为了将来的测试或其他目的,有一个更加方便的对象调用。

然后,365最新体育网站_365体育网是假不假_365足球体育官方网站又对 WebContext 进行了封装,构造了一个 MvcContext 对象。注意,这个 MvcContext 对象,也即mvc365最新体育网站_365体育网是假不假_365足球体育官方网站的上下文对象,携带了整个365最新体育网站_365体育网是假不假_365足球体育官方网站使用过程中最常用的数据,你可以在任何controller中直接通过 ctx 属性来得到它。

如果你通过 HttpContext 对象,或者它的封装对象 WebContext 来进行编程,你得到的数据都是最原始的,比如要获取客户端QueryString,你需要通过 httpContext.Request.QueryString 来得到,但通过 MvcContext ,你可以在 controller 中 ctx.Get("") 就可以获取。

MvcContext 的 Get/GetInt/Post/PostInt 等方法,不仅仅是对 request.QueryString 和 request.Form 的封装,而且还进一步做了安全过滤。根据“防御式编程”的做法,应该默认客户端输入的数据都是危险的,或故意捣乱的。HttpContext 的 request.QueryString 和 request.Form 固然可以得到最原始的客户端数据,但这些数据因为没有做过过滤,所以往往带来危害。

bet36体育655365.com有经验的 .net 程序员,一般都会对 request.QueryString 和 request.Form 的数据进行处理,而这个处理过程,在 web 开发中,几乎是每天、每时、每个页面中都会碰到。wojilu framework 觉得,应该将这个安全过滤的过程集中封装起来,在365最新体育网站_365体育网是假不假_365足球体育官方网站的使用过程中,程序员没有必要赤裸裸地面对危险的数据,所以就出现了 MvcContext 中的 Get/GetInt/Post/PostInt ,通过这些方法,你就不用害怕客户端恶意输入的