XmlHttpRequestProcessor.cs
上传用户:szgaoree
上传日期:2009-01-05
资源大小:74k
文件大小:3k
源码类别:

Ajax

开发平台:

C#

  1. using System;
  2. using System.Web;
  3. using System.Reflection;
  4. using System.IO;
  5. namespace AjaxPro
  6. {
  7. internal class XmlHttpRequestProcessor : IAjaxProcessor
  8. {
  9. private int hashCode;
  10. internal XmlHttpRequestProcessor(HttpContext context, Type type) : base(context, type)
  11. {
  12. }
  13. #region IAjaxProcessor Members
  14. public override object[] RetreiveParameters()
  15. {
  16. ParameterInfo[] pi = method.GetParameters();
  17. if(pi.Length == 0)
  18. return null;
  19. object[] args = new object[pi.Length];
  20. // initialize default values
  21. for(int i=0; i<pi.Length; i++)
  22. args[i] = pi[i].DefaultValue;
  23. byte[] b = new byte[context.Request.InputStream.Length];
  24. if(context.Request.InputStream.Read(b, 0, b.Length) == 0)
  25. return null;
  26. StreamReader sr = new StreamReader(new MemoryStream(b), System.Text.UTF8Encoding.UTF8);
  27. string v = null;
  28. try
  29. {
  30. v = sr.ReadToEnd();
  31. }
  32. finally
  33. {
  34. sr.Close();
  35. }
  36. if(v == null) // something went wrong, we cannot fill the arguments
  37. return args;
  38. hashCode = v.GetHashCode();
  39. // check if we have to decrypt the JSON string.
  40. if(Utility.Settings != null && Utility.Settings.Encryption != null)
  41. v = Utility.Settings.Encryption.CryptProvider.Decrypt(v);
  42. JavaScriptObject jso = (JavaScriptObject)JavaScriptDeserializer.Deserialize(v, typeof(JavaScriptObject));
  43. for(int i=0; i<pi.Length; i++)
  44. {
  45. if(jso.Contains(pi[i].Name))
  46. args[i] = JavaScriptDeserializer.Deserialize((IJavaScriptObject)jso[pi[i].Name], pi[i].ParameterType);
  47. }
  48. return args;
  49. }
  50. public override string SerializeObject(object o)
  51. {
  52. // On the client we want to have a real object.
  53. // For more details visit: http://www.crockford.com/JSON/index.html
  54. // 
  55. // JSON is built on two structures:
  56. //   - A collection of name/value pairs. In various languages, 
  57. //     this is realized as an object, record, struct, dictionary, 
  58. //     hash table, keyed list, or associative array. 
  59. //   - An ordered list of values. In most languages, this is realized 
  60. //     as an array. 
  61. string res = JavaScriptSerializer.Serialize(o);
  62. context.Response.Write(res);
  63. return res;
  64. }
  65. public override MethodInfo Method
  66. {
  67. get
  68. {
  69. if(context.Request.Headers["Ajax-method"] != null)
  70. method = type.GetMethod(context.Request.Headers["Ajax-method"]);
  71. return method;
  72. }
  73. }
  74. public override bool IsEncryptionAble
  75. {
  76. get
  77. {
  78. return true;
  79. }
  80. }
  81. public override int GetHashCode()
  82. {
  83. return hashCode;
  84. }
  85. #endregion
  86. }
  87. }