首页 > 代码库 > Farseer.net轻量级开源框架 中级篇:Cookies、Session、Request
Farseer.net轻量级开源框架 中级篇:Cookies、Session、Request
Cookies、Session、Request是专门针对WEB项目的额外支持。
顺便说下,今天有园友在群里问到ORM对MVC的支持。或者对WinForm支持吗?对于ORM来说,本身是对表现层没有任何的联系。它仅仅是让你在开发的时候,能以面向对象的思想(语法)去做交互。
不过作者长期主要在WebForm上做开发,所以对Web上的服务器控件支持的比较多而已。所以这里大家不需要担心。
好,回到正题,Farseer对Cookies、Session、Request进行了二次封装,当然这些封装主要是为了提供更多的一些使用上的灵活而封装的。
它们均在命名空间:FS.Utils.Web 中。
1 /// <summary> 2 /// Cookies工具 3 /// </summary> 4 public abstract class Cookies 5 { 6 /// <summary> 7 /// 写cookie值 8 /// </summary> 9 /// <param name="strName">名称</param>10 /// <param name="strValue">值</param>11 public static void Set(string strName, object strValue, bool isAddPrefix = true);12 13 /// <summary>14 /// 写cookie值15 /// </summary>16 /// <param name="strName">名称</param>17 /// <param name="value">值</param>18 /// <param name="expires">过期时间(分钟)</param>19 public static void Set(string strName, object value, int expires, bool isAddPrefix = true);20 21 /// <summary>22 /// 读cookie值23 /// </summary>24 /// <param name="strName">名称</param>25 /// <returns>cookie值</returns>26 public static string Get(string strName, bool isAddPrefix = true);27 28 /// <summary>29 /// 读cookie值30 /// </summary>31 /// <param name="strName">名称</param>32 /// <param name="defValue">默认值</param>33 /// <returns>cookie值</returns>34 public static T Get<T>(string strName, T defValue, bool isAddPrefix = true);35 36 /// <summary>37 /// 移除cookie值38 /// </summary>39 /// <param name="strName">名称c</param>40 /// <returns></returns>41 public static void RemoveCookie(string strName, bool isAddPrefix = true);42 }
- 增加了对泛型的支持。
- 增加了名称前缀的支持。可以到:System.config配置文件中的Cookies_Prefix进行设置
- 增加对TimeOut的控制。可以到:System.config配置文件中的Cookies_TimeOut进行设置
- 增加对域的控制。可以到:General.config配置文件中的CookiesDomain进行设置。默认为空(不限制),可以填比如:bbs.xxx.com 或者 aaa.xxx.com
- 增加移除Cookies的方法。
- 取不到值时(不存在)返回参数默认值。
如果使用Cookies托管,必须要了解到的是由Cookies托管的Cookies都被设置了Cookies前缀。这是由System.config配置文件中的Cookies_Prefix进行设置的。默认是有前缀的。如果发现系统的与Farseer提供的Cookies无法兼容,则主要原因是前缀的问题。
1 /// <summary> 2 /// Session工具 3 /// </summary> 4 public abstract class Sessions : IRequiresSessionState 5 { 6 /// <summary> 7 /// 从 Session 读取 键为 name 的值 8 /// </summary> 9 /// <param name="name">SessionID</param>10 public static string Get(string name, bool isAddPrefix = true);11 12 /// <summary>13 /// 从 Session 读取 键为 name 的值14 /// </summary>15 /// <param name="strName">SessionID</param>16 /// <param name="defValue">为空时返回的值</param>17 public static T Get<T>(string strName, T defValue, bool isAddPrefix = true);18 19 /// <summary>20 /// 向 Session 保存 键为 name 的, 值为 value21 /// </summary>22 /// <param name="name">SessionID</param>23 /// <param name="value">插入的值</param>24 public static void Set(string strName, object value, bool isAddPrefix = true);25 26 /// <summary>27 /// 从 Session 删除 键为 name session 项28 /// </summary>29 /// <param name="name">SessionID</param>30 public static void Remove(string strName, bool isAddPrefix = true);31 32 /// <summary>33 /// 删除所有 session 项34 /// </summary>35 public static void RemoveAll();36 }
- 增加了对泛型的支持。
- 增加了名称前缀的支持。可以到:System.config配置文件中的Session_Prefix进行设置
- 增加对TimeOut的控制。可以到:System.config配置文件中的Session_TimeOut进行设置
- 增加移除所有的方法:RemoveAll()
- 取不到值时(不存在)返回参数默认值。
1 /// <summary> 2 /// Request操作类 3 /// </summary> 4 public abstract class Req 5 { 6 /// <summary> 7 /// 请求类型 8 /// </summary> 9 public enum SubmitType 10 { 11 /// <summary> 12 /// Get 13 /// </summary> 14 Get = 0, 15 16 /// <summary> 17 /// Post 18 /// </summary> 19 Post = 1, 20 21 /// <summary> 22 /// Get 和 Post (Post优先) 23 /// </summary> 24 All = 255 25 } 26 27 /// <summary> 28 /// 获取当前应用程序访问的完整路径信息 29 /// http://localhost:1480/WebSite2/Default.aspx?UserID=1 30 /// </summary> 31 /// <returns></returns> 32 public static string GetUrl() 33 34 /// <summary> 35 /// 获取当前应用程序访问的域名(带端口) 36 /// www.xxx.com:81 37 /// </summary> 38 /// <param name="node">要获取第几个节点,0:不限制</param> 39 public static string GetDomain(int node = 3) 40 41 /// <summary> 42 /// 获取当前应用程序访问的路径(不带域名、不带页面文件名、URL重写地址的真实路径) 43 /// /Manage/ 44 /// </summary> 45 public static string GetTruePath() 46 47 /// <summary> 48 /// 获取当前应用程序访问的路径(不带域名、不带页面文件名) 49 /// /Manage/ 50 /// </summary> 51 public static string GetPath() 52 53 /// <summary> 54 /// 获取当前应用程序访问的页面文件名称(不带参数) 55 /// Default.aspx 56 /// </summary> 57 public static string GetPageName() 58 59 /// <summary> 60 /// 获取当前应用程序访问的参数 61 /// </summary> 62 public static string GetParams() 63 64 /// <summary> 65 /// 解析成参数字符串 66 /// </summary> 67 /// <param name="dic"></param> 68 /// <returns></returns> 69 public static string ParseParams(Dictionary<string, string> dic) 70 71 /// <summary> 72 /// 上一个页面地址 73 /// </summary> 74 public static string GetPrevious() 75 76 /// <summary> 77 /// 判断当前页面是否接收到了提交请求 78 /// </summary> 79 public static bool IsSubmit(SubmitType submitType = SubmitType.Post) 80 81 /// <summary> 82 /// 返回指定的服务器变量信息 83 /// </summary> 84 /// <param name="strName">服务器变量名</param> 85 /// <returns>服务器变量信息</returns> 86 public static string GetServerString(string strName) 87 88 /// <summary> 89 /// 得到当前完整主机头 90 /// </summary> 91 /// <returns></returns> 92 public static string GetCurrentFullHost() 93 94 /// <summary> 95 /// 得到主机头 96 /// </summary> 97 /// <returns></returns> 98 public static string GetHost() 99 100 /// <summary>101 /// 判断是否来自搜索引擎链接102 /// </summary>103 /// <returns>是否来自搜索引擎链接</returns>104 public static bool IsSearchEnginesGet()105 106 /// <summary>107 /// 返回表单或Url参数的总个数108 /// </summary>109 /// <returns></returns>110 public static int GetParamCount()111 112 /// <summary>113 /// Request.QueryString114 /// </summary>115 public static string QS(string parmsName)116 117 /// <summary>118 /// Request.QueryString119 /// </summary>120 public static T QS<T>(string parmsName, T defValue)121 122 /// <summary>123 /// Request.QueryString124 /// </summary>125 public static string QS(string parmsName, Encoding encoding)126 127 /// <summary>128 /// Request.QueryString129 /// </summary>130 public static T QS<T>(string parmsName, T defValue, Encoding encoding)131 132 /// <summary>133 /// Request.Form134 /// </summary>135 public static string QF(string parmsName)136 137 /// <summary>138 /// Request.Form139 /// </summary>140 public static T QF<T>(string parmsName, T defValue)141 142 /// <summary>143 /// 先QF后QS144 /// </summary>145 /// <param name="parmsName"></param>146 /// <returns></returns>147 public static string QA(string parmsName)148 149 /// <summary>150 /// 先QF后QS151 /// </summary>152 /// <param name="parmsName"></param>153 /// <returns></returns>154 public static T QA<T>(string parmsName, T defValue)155 156 /// <summary>157 /// 获得当前页面客户端的IP158 /// </summary>159 /// <returns>当前页面客户端的IP</returns>160 public static string GetIP()161 162 /// <summary>163 /// 判断当前访问是否来自浏览器软件164 /// </summary>165 /// <returns>当前访问是否来自浏览器软件</returns>166 public static bool IsBrowserGet()167 168 /// <summary>169 /// 判断是否有上传的文件170 /// </summary>171 /// <returns>是否有上传的文件</returns>172 public static bool IsPostFile()173 174 /// <summary>175 /// 保存用户上传的文件176 /// </summary>177 /// <param name="path">保存路径</param>178 public static void SaveRequestFile(string path)179 180 /// <summary>181 /// Post信息182 /// </summary>183 public static string Post(HttpClient wc, string url, string data, Encoding encoding = null)184 185 /// <summary>186 /// 获取端口187 /// </summary>188 /// <returns></returns>189 public static int GetPort()190 191 /// <summary>192 /// 把服務器返回的Cookies信息寫入到客戶端中193 /// </summary>194 public static void WriteCookies(HttpClient wc)195 196 /// <summary>197 /// 记住用户最后一次访问地址198 /// </summary>199 public static void RememberUrl()200 201 /// <summary>202 /// 转到网址203 /// </summary>204 public static void GoToUrl(string url, params object[] args)205 206 /// <summary>207 /// 转到网址(默认为最后一次访问)208 /// </summary>209 public static void GoToUrl(string url = "")210 211 /// <summary>212 /// 把提交过来的内容转化成为实体类(注意CheckBox 未选中时,是NULL,需要手动判断)213 /// </summary>214 /// <param name="request">NameValueCollection</param>215 /// <param name="prefix">控件前缀</param>216 /// <param name="tip">弹出框事件委托</param>217 /// <param name="url">跳转地址</param>218 public static TInfo Fill<TInfo>(NameValueCollection request, Action<string, string> tip = null, string url = "",219 string prefix = "hl") where TInfo : ModelInfo, new()220 221 /// <summary>222 /// 把提交过来的内容转化成为实体类(注意CheckBox 未选中时,是NULL,需要手动判断)223 /// </summary>224 /// <param name="request">NameValueCollection</param>225 /// <param name="prefix">控件前缀</param>226 /// <param name="tip">弹出框事件委托</param>227 public static TInfo Fill<TInfo>(NameValueCollection request, Action<Dictionary<string, List<string>>> tip,228 string prefix = "hl") where TInfo : ModelInfo, new()229 230 /// <summary>231 /// 把提交过来的内容转化成为实体类(注意CheckBox 未选中时,是NULL,需要手动判断)232 /// </summary>233 /// <param name="request">NameValueCollection</param>234 /// <param name="prefix">控件前缀</param>235 /// <param name="dicError">返回错误消息,key:属性名称;value:错误消息</param>236 public static TInfo Fill<TInfo>(NameValueCollection request, out Dictionary<string, List<string>> dicError, string prefix = "hl") where TInfo : ModelInfo, new()237 }
这里有有很多方法,我在这里就不一一说明了。其中QS/QF/QA在上几篇文章中已经说明过了。因为它非常常用,所以我在这里在啰嗦一下。
QS全称是:Request.QueryString
QF全称是:Request.Form
QA:先执行QF,如果没有取到值,再执行QA
在这里进行了二次封装的目的是加入了泛型的支持,很多时候我们在获取值的时候(Request.Form[""]、Request.QueryString[""])需要先判断是否为null值。然后再进去值的转换(比如转到int/bool/datetime)。
使用QS/QF/QA 则可以通过两个参数进行以上的操作:QS("ID",0) 第1个参数是参数名称、第2个参数是默认值。当转换失败,比如为Null值或者为非数字的字符串时,则返回0。通过这个0,我们也可以确定为int类型 所以整个返回的是INT类型。
基本上作者都没有使用原生的以上提到的这些功能了,都是使用了框架提供的方法。在使用的过程中,大家会发觉代码量的开发明显减少。
QQ群:116228666 (Farseer.net开源框架交流) 请注明:博客园
Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。
Farseer 意为:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。
ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)
Farseer.Net的目标是:快速上手、快速开发、简单方便。
1 new User { ID = 1, Name = "张三" }.Insert()
Farseer.net轻量级开源框架 中级篇:Cookies、Session、Request