Page_Load接收随机参数放到字典类中
Page_Load接收随机参数放到字典类中,可以用作签名。
普通的接收url的参数可以用作下面这种模式:
int appid =Convert.ToInt32(param["appid"]);
但是上面这种模式又有一定的限制,即前提是要知道存在appid这个参数名,那么问题来了,如果url是随机传参怎么办,怎么知道url的参数名和值那呢?
首先在 Page_Load事件里,写如下代码:
string queryString = HttpContext.Current.Request.Url.Query;//行如这样的 ?a=123&ak=jakd&kl=mm&cv=909
// queryString = queryString.Replace("amp;", "");//有时候接收的时候,是这样的 ?a=123amp;&ak=jakdamp;&kl=mmamp;&cv=909,就需要替换掉amp;
NameValueCollection col = GetQueryString(queryString);
Dictionary<string, string> param = new Dictionary<string, string>();
for (int i = ; i < col.Count; i++)
{ param.Add(col.GetKey(i), col[i].ToString());//关键代码
}
string ak= param["ak"].ToString();//如果随机参数中确定存在ak,那么就可以这样接收值
/// <summary>
/// 将查询字符串解析转换为名值集合.
/// </summary>
/// <param name="queryString"></param>
/// <returns></returns>
public static NameValueCollection GetQueryString(string queryString)
{
return GetQueryString(queryString, null, true);
}
/// <summary>
/// 将查询字符串解析转换为名值集合.
/// </summary>
/// <param name="queryString"></param>
/// <param name="encoding"></param>
/// <param name="isEncoded"></param>
/// <returns></returns>
public static NameValueCollection GetQueryString(string queryString, Encoding encoding, bool isEncoded)
{
queryString = queryString.Replace("?", "");
NameValueCollection result = new NameValueCollection(StringComparer.OrdinalIgnoreCase);
if (!string.IsNullOrEmpty(queryString))
{
int count = queryString.Length;
for (int i = ; i < count; i++)
{
int startIndex = i;
int index = -;
while (i < count)
{
char item = queryString[i];
if (item == '=')
{
if (index < )
{
index = i;
}
}
else if (item == '&')
{
break;
}
i++;
}
string key = null;
string value = null;
if (index >= )
{
key = queryString.Substring(startIndex, index - startIndex);
value = queryString.Substring(index + , (i - index) - );
}
else
{
key = queryString.Substring(startIndex, i - startIndex);
}
if (isEncoded)
{
result[MyUrlDeCode(key, encoding)] = MyUrlDeCode(value, encoding);
}
else
{
result[key] = value;
}
if ((i == (count - )) && (queryString[i] == '&'))
{
result[key] = string.Empty;
}
}
}
return result;
} /// <summary>
/// 解码URL.
/// </summary>
/// <param name="encoding">null为自动选择编码</param>
/// <param name="str"></param>
/// <returns></returns>
public static string MyUrlDeCode(string str, Encoding encoding)
{
if (encoding == null)
{ Encoding utf8 = Encoding.UTF8;
//首先用utf-8进行解码
string code = HttpUtility.UrlDecode(str.ToUpper(), utf8);
//将已经解码的字符再次进行编码.
string encode = HttpUtility.UrlEncode(code, utf8).ToUpper();
if (str == encode)
encoding = Encoding.UTF8;
else
encoding = Encoding.GetEncoding("utf-8");
}
return HttpUtility.UrlDecode(str, encoding);
}
static public string EncodeValue(string value)
{
StringBuilder builder = new StringBuilder();
for (int i = ; i < value.Length; i++)
{
if (Regex.IsMatch(value[i].ToString(), @"[a-zA-Z0-9!()*]"))
{
builder.Append(value[i].ToString());
}
else
{
//byte[] bt = new byte[1];
byte[] bt = Encoding.UTF8.GetBytes(value[i].ToString());//中文的话,一个汉字有三个字节
for (int k = ; k < bt.Length; k++)
{
int ascii = (short)(bt[k]);//计算每个字节的ascii码值
builder.Append("%" + Convert.ToString(ascii, ).ToUpper());
} }
}
return builder.ToString();
}
将param 排序,该方法可以扩展
static private string MakeSource(string method ,Dictionary<string, string> param)
{ string strs=method+&; string query_string = "";
List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(param);
myList.Sort(delegate(KeyValuePair<string, string> s1, KeyValuePair<string, string> s2)
{
return s1.Key.CompareTo(s2.Key);
});
foreach (KeyValuePair<string, string> pair in myList)
{
query_string = query_string + pair.Key + "=" + pair.Value + "&";
}
query_string = query_string.Substring(, query_string.Length - );
query_string = UrlEncode(query_string, Encoding.UTF8);
return strs + query_string; }
Page_Load接收随机参数放到字典类中的更多相关文章
- springboot 在配置文件写参数注入到类中
@Configuration//配置文件位置@PropertySource("classpath:city.properties")//前缀@ConfigurationProper ...
- Struts系列笔记(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- Struts框架(6)---action接收请求参数
action接收请求参数 在web开发中,去接收请求参数来获得表单信息非常的常见,自己也总结整理了有关Struts2通过action接收请求参数的几种方法. Struts2 提供三种数据封装的方式: ...
- python 类中方法总结 --- 实例方法、类方法、静态方法
在python的类语法中,可以出现三种方法,具体如下: (1)实例方法 1)第一个参数必须是实例本身,一般使用[self]表示. 2)在实例方法中,可以通过[self]来操作实例属性,[类名]来操作类 ...
- pytest之将多个测试用例放在一个类中,生成唯一临时文件夹
将多个测试用例放在一个类中 简单来说就是将多个测试用例放到类中,通过pytest去管理,这和Testng很像.示例代码如下: """ 将多个测试用例放到一个类中执行 &q ...
- 编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类
图 1 一.从图1发现了什么问题呢? 答案:1.参数传的的太多了:2.另外注释也没写好. 说明:一个方法中,传参数的数量最好不要超过5个. 应该采用:struct或class,或一个字典类都行.其中 ...
- Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
返回本章节 返回作业目录 需求说明: 定义一个计算器类, 实现计算器类中加. 减. 乘. 除的运算方法, 每个方法能够接收2个参数. 实现思路: 定义计算器类. 定义计算器类中加.减.乘.除的方法. ...
- JAVA 如何把request请求的参数,快速放到model对象中
因为项目需要,需要从request中读取大量的参数. 因为本人过懒,所以写了个方法把request参数,直接放到对应的类中. 参数 String str="aa,bb,cc"; P ...
- C#中的Dictionary字典类介绍
Dictionary字典类介绍 必须包含名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是 ...
随机推荐
- Android L下载
Android L千呼万唤最终出来了,那么我们先下载下来一睹为快,那么怎么去拿到最新的L的分支 那依照傻瓜步骤总结下(Linux Ubuntu) 1.获取repo文件 (1).curl https:/ ...
- Html5 の 微信飞机大战
(function () { var imageUrl = "images/"; //获取画布对象 var c = $("#game-box").get(0); ...
- GCD && Run Loops学习笔记
1.GCD 使用不同优先级的若干个队列乍听起来非常直接,只是,我们强烈建议,在绝大多数情况下使用默认的优先级队列就能够了.假设运行的任务须要訪问一些共享的资源,那么在不同优先级的队列中调度这些任务非常 ...
- AngularJS系列之总结
AngularJS深入的系列就是这九篇博客了,把我以前在项目中应用到的和自己学习的都总结在了里面.为了更方便的看,把我写的AngularJS系列的博客都列到下面.之后就开始学习ionic:html5移 ...
- [Cocoa]深入浅出 Cocoa 之消息
深入浅出 Cocoa 之消息 罗朝辉(http://blog.csdn.net/kesalin) 转载请注明出处 在入门级别的ObjC 教程中,我们常对从C++或Java 或其它面向对象语言转过 ...
- Spark Standalone模式应用程序开发
作者:过往记忆 | 新浪微博:左手牵右手TEL | 能够转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明博客地址:http://www.iteblog.com/文章标题:<Spar ...
- PHP 8: PHP的运算符
原文:PHP 8: PHP的运算符 本章将介绍PHP的运算符.运算符这个问题在每种语言里都有,因为我们已经熟悉了编程语言里的一种或是多种,所以只需要了解一下就行了.概括一下吧.PHP运算符有很多种,看 ...
- 4GB内存原32位系统(x86)取舍问题,显卡共享内存Win8.1完全不用担心
情景:集成显卡 配置: 4G显示3.25GB 此时系统自动将用不到的系统完全共享给显卡(768MB而不是256): 看显卡适配器信息,完全共享给了显卡 解说:上图总可用图形内存 = 图2中备用 + 硬 ...
- 实例学习SSIS(二)--使用迭代
原文:实例学习SSIS(二)--使用迭代 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SSIS(四)-- ...
- StringTokenizer使用类
StringTokenizer它被用来分离String应用类别.当量VB的split功能. 1.构造函数 public StringTokenizer(String str) public Strin ...