示例#1
0
        /// <summary>
        /// 根据编码类型获取请求参数。对于POST不解码,因为POST可以传递中文。
        /// 通常使用此方法。
        /// </summary>
        /// <remarks>
        /// 2009.8.18       zhineng.li         created
        /// </remarks>
        /// <param name="request">当前请求的request对象</param>
        /// <param name="encode">编码枚举值</param>
        /// <returns>键为参数名,值为参数值的NameValue集合</returns>
        public static NameValueCollection GetRequestParameters(HttpRequest request, EEncodingType encoding)
        {
            NameValueCollection result     = null;
            Encoding            destEncode = null;

            //获取指定编码格式的Encoding对象
            try
            {
                //获取指定的编码格式
                destEncode = Encoding.GetEncoding((int)encoding);
            }
            catch
            {
                //如果获取指定编码格式失败,则使用默认的编码类型
                destEncode = Encoding.GetEncoding(0);
            }


            //根据不同的HttpMethod方式,获取请求的参数.如果是POST则不进行编码。
            if (request.HttpMethod == "POST")
            {
                result = request.Form;
            }
            else
            {
                result = System.Web.HttpUtility.ParseQueryString(request.Url.Query, destEncode);
            }

            //返回结果
            return(result);
        }
示例#2
0
文件: Enc.cs 项目: mixa3607/BeamErlRw
 public static Encoding Get(EEncodingType type)
 {
     return(type switch
     {
         EEncodingType.Ascii => AsciiEncoding,
         EEncodingType.Latin1 => Latin1Encoding,
         EEncodingType.Utf8 => Utf8Encoding,
         _ => throw new ArgumentOutOfRangeException(nameof(type), type, null)
     });
        public static int Write(this EndianBinaryWriter writer, string str, EEncodingType encodingType, bool nullTerminated = false)
        {
            var buffer = Enc.Enc.Get(encodingType).GetBytes(str);

            if (nullTerminated)
            {
                Array.Resize(ref buffer, buffer.Length + 1);
            }
            writer.Write(buffer);
            return(buffer.Length);
        }
示例#4
0
        public static BeamAtomsChunk Read(EndianBinaryReader reader, EEncodingType encodingType)
        {
            var atomsCount = reader.ReadUInt32();
            var atoms      = new string[atomsCount];

            for (int i = 0; i < atomsCount; i++)
            {
                var atomLen = reader.ReadByte();
                atoms[i] = reader.ReadString(atomLen, encodingType);
            }
            return(new BeamAtomsChunk()
            {
                Atoms = atoms,
                EncodingType = encodingType
            });
        }
示例#5
0
        public static TermAtom Read(BinaryReader reader, EEncodingType encType, ETermSize size)
        {
            var enc = Enc.Enc.Get(encType);
            var len = size switch
            {
                ETermSize.Small => reader.ReadByte(),
                ETermSize.Large => reader.ReadUInt16(),
                _ => throw new NotSupportedException(),
            };
            var atomBytes = reader.ReadBytes(len);
            var atom      = enc.GetString(atomBytes);

            return(new TermAtom()
            {
                EncodingType = encType,
                Atom = atom
            });
        }
示例#6
0
        public static NameValueCollection GetParameters(string _requestString, EEncodingType encoding)
        {
            NameValueCollection result     = null;
            Encoding            destEncode = null;

            //获取指定编码格式的Encoding对象
            try
            {
                //获取指定的编码格式
                destEncode = Encoding.GetEncoding((int)encoding);
            }
            catch
            {
                //如果获取指定编码格式失败,则使用默认的编码类型
                destEncode = Encoding.GetEncoding(0);
            }
            //按照指定编码类型进行解码
            result = System.Web.HttpUtility.ParseQueryString(_requestString, destEncode);
            return(result);
        }
示例#7
0
        public static string ReadString(this EndianBinaryReader reader, int bytesCount, EEncodingType encodingType)
        {
            var enc   = Enc.Enc.Get(encodingType);
            var bytes = reader.ReadBytes(bytesCount);

            return(enc.GetString(bytes));
        }
示例#8
0
        /// <summary>
        /// 根据编码类型获取请求参数。对于POST请求同样解码。
        /// </summary>
        /// <remarks>
        /// 2009.8.18       zhineng.li         created
        /// </remarks>
        /// <param name="request">当前请求的request对象</param>
        /// <param name="encode">编码枚举值</param>
        /// <returns>键为参数名,值为参数值的NameValue集合</returns>
        public static NameValueCollection GetRequestParametersDecode(HttpRequest request, EEncodingType encoding)
        {
            NameValueCollection result     = null;
            Encoding            destEncode = null;

            //获取指定编码格式的Encoding对象
            try
            {
                //获取指定的编码格式
                destEncode = Encoding.GetEncoding((int)encoding);
            }
            catch
            {
                //如果获取指定编码格式失败,则使用默认的编码类型
                destEncode = Encoding.GetEncoding(0);
            }


            //根据不同的HttpMethod方式,获取请求的参数.如果没有Encoding对象则使用服务器端默认的编码.
            if (request.HttpMethod == "POST")
            {
                Stream resStream   = request.InputStream;
                byte[] filecontent = new byte[resStream.Length];
                resStream.Read(filecontent, 0, filecontent.Length);
                string postquery = destEncode.GetString(filecontent);
                result = HttpUtility.ParseQueryString(postquery, destEncode);
            }
            else
            {
                result = System.Web.HttpUtility.ParseQueryString(request.Url.Query, destEncode);
            }

            //返回结果
            return(result);
        }