首页 > 代码库 > HttpContext的dynamic包装器DynamicHttpContext (附原代码)
HttpContext的dynamic包装器DynamicHttpContext (附原代码)
项目背景:在.net framework下使用asp.net webform,特别是aspx+ajax+ashx中,ashx后台代码获取传入参数的时候,需要很多[“…”],我用dynamic对他进行包装。
废话不多说,上代码(文章最下面有上传打包代码):
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace MyWebDemo{ public partial class UserList : System.Web.UI.Page { /// <summary> /// StevemChennet@live.com qq:38798579 /// http://www.cnblogs.com/stevenchennet /// </summary> protected void Page_Load(object sender, EventArgs e) { // // 这是以前的做法,这些["parameter"]很费劲 // //HttpContext context = HttpContext.Current; //if (!this.IsPostBack) //{ // // http://localhost:20000/UserList.aspx?id=1&name=StevenChennet // int id = int.Parse(context.Request.Params["id"]); //
// string name = context.Request.Params["nAMe"]; // this.lbl.InnerText = string.Format("Get提交 id:{0} name:{1}", id, name); //} //else //{ // // form post // int age = int.Parse(context.Request.Form["age"]); // string address = context.Request.Form["AddRESS"]; // this.lbl.InnerText = string.Format("Post提交 age:{0} address:{1}", age, address); //} dynamic dContext = new DynamicHttpContext(HttpContext.Current); if (!this.IsPostBack) { // http://localhost:20000/UserList.aspx?id=1&name=StevenChennet int id = dContext.id; // nAMe也可以用Name,忽略大小写的,这里故意写成nAMe意思是忽略大小写。
string name = dContext.nAMe; this.lbl.InnerText = string.Format("Get提交 id:{0} name:{1}", id, name); } else { // form post int age = dContext.Age; string address = dContext.AddRESS; this.lbl.InnerText = string.Format("Post提交 age:{0} address:{1}", age, address); } } }}
下面是实现的代码
using System;using System.Collections.Generic;using System.Dynamic;using System.Linq;using System.Web;namespace System.Web{ /// <summary> /// StevemChennet@live.com qq:38798579 /// http://www.cnblogs.com/stevenchennet /// </summary> public class DynamicHttpContext : DynamicObject { private string keyContent; private HttpContext httpContext; public DynamicHttpContext(HttpContext context) { this.httpContext = context; } public override bool TryGetMember(GetMemberBinder binder, out object result) { string key = binder.Name; if (httpContext.Request.HttpMethod == "GET") { this.keyContent = this.httpContext.Request.QueryString.Get(key); } else { this.keyContent = this.httpContext.Request.Form.Get(key); } result = this; return true; } public override bool TryConvert(ConvertBinder binder, out object result) { result = null; Type binderType = binder.Type; //int if (binderType == typeof(int)) { result = int.Parse(this.keyContent); } else if (binderType == typeof(int?)) { if (string.IsNullOrWhiteSpace(this.keyContent)) { result = int.Parse(this.keyContent); } else { result = default(int?); } } // bool else if (binderType == typeof(bool)) { result = bool.Parse(this.keyContent); } else if (binderType == typeof(bool?)) { if (string.IsNullOrWhiteSpace(this.keyContent)) { result = bool.Parse(this.keyContent); } else { result = default(bool?); } } // datetime else if (binderType == typeof(DateTime)) { result = DateTime.Parse(this.keyContent); } else if (binderType == typeof(DateTime?)) { if (string.IsNullOrWhiteSpace(this.keyContent)) { result = DateTime.Parse(this.keyContent); } else { result = default(DateTime?); } } // string else if (binderType == typeof(string)) { result = this.keyContent; } else { throw new NotSupportedException(string.Format("类型 {0} 还未实现,请添加转换代码", binderType.ToString())); } return true; } }}
-----------------------利益相关:.net软狗一枚,济南工作,qq:38798579,欢迎同道朋友骚扰。----------------------
代码打包下载(VS2013)
http://files.cnblogs.com/StevenChennet/AppDomainPerformanceDemo.zip
HttpContext的dynamic包装器DynamicHttpContext (附原代码)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。