项目背景:在.net framework下使用asp.net webform,特别是aspx+ajax+ashx中,ashx后台代码获取传入参数的时候,需要很多[“…”],我用dynamic对他进行包装。

废话不多说,上代码(文章最下面有上传打包代码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //
            // 这是以前的做法,这些["parameter"]很费劲
            //
            //HttpContext context = HttpContext.Current;
            //if (!this.IsPostBack)
            //{
            //    int id = int.Parse(context.Request.Params["id"]);
            //    <br>            //    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)
            {
                int id = dContext.id;
                // nAMe也可以用Name,忽略大小写的,这里故意写成nAMe意思是忽略大小写。<br>                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);
            }
 
        }
    }
}

  

下面是实现的代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Web;
 
namespace System.Web
{
    /// <summary>
    /// StevemChennet@live.com qq:38798579
    /// </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;
        }
    }
}
1
  

 

 

 

-----------------------利益相关:.net软狗一枚,济南工作,qq:38798579,欢迎同道朋友骚扰。----------------------

代码打包下载(VS2013)

https://files.cnblogs.com/StevenChennet/AppDomainPerformanceDemo.zip