在用户通过远程提交时,如果是get方式,请求的参数通过Request.QueryString来提供,而如果是post方式时,则是通过Request.InputStream来提供,因此需要对他们进行分别的处理。
下边的代码是我整理出来的一个可以通用的请求转换的方法,至于encode的获取,可以在页面代码中事先通过 Reques.Params["encode"]来获取,如:string encode = Request.Params["encode"]。
这个方案目前仅适用于查询参数的解决,没有考虑涉及远程大数据量提交。
/// <summary>
/// 根据指定的编码格式返回请求的参数集合
/// </summary>
/// <param name="request">请求的字符串</param>
/// <param name="encode">编码模式</param>
/// <returns></returns>
public static NameValueCollection GetRequestParameters(HttpRequest request,string encode)
{
NameValueCollection nv = null;
Encoding destEncode = null;
if (!String.IsNullOrEmpty(encode))
{
try
{
destEncode = Encoding.GetEncoding(encode);
}
catch { }
}
if (request.HttpMethod == "POST")
{
if (null != destEncode)
{
Stream resStream = request.InputStream;
byte[] filecontent = new byte[resStream.Length];
resStream.Read(filecontent, 0, filecontent.Length);
string postquery = Encoding.Default.GetString(filecontent);
nv = HttpUtility.ParseQueryString(postquery, Encoding.GetEncoding(encode));
}
else
nv = request.Form;
}
else
{
if (null != destEncode)
{
nv = System.Web.HttpUtility.ParseQueryString(request.Url.Query, Encoding.GetEncoding(encode));
}
else
{
nv = request.QueryString;
}
}
return nv;
}