关于通过URL传参的思考
对于当前大家写程序存在的问题之一:在写网页时在获取参数的时候不严谨造成程序运行异常。
首先对于使用URL传参的第一个阶段就是使用Request.QueryString[“para”]去获取参数。当然这段代码本省并不存在问题,但是可能存在如下的引用情况:
String UserName=Request.QueryString[“name”].ToString();
//这段代码如果是URL中没有?name=lvfei这样的参数就会报 ”未将对象引用到实例化”的异常
Int Id=Convert.ToInt32(Request.QueryString[“id”].ToString());
//这段代码会也会出项上面所描述的问题
//另外假设上面的参数也有,但是参数是这样的: ?id=1fd。则程序也会出现异常,“输入字符串格式错误“
这里将的也仅限于int和string 的数据类型,其他的也是一样的。
对于这个问题,我对QueryString方法进行了封装,方法如下
public static bool QueryString(string paraName, out long result) { bool _sucess = false; if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[paraName])) { _sucess = long.TryParse(HttpContext.Current.Request.QueryString[paraName].ToString(), out result); if (!_sucess) { result = 1; } } else { result = 1; } return _sucess; } public static bool QueryString(string paraName, out int result) { bool _sucess = false; if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[paraName])) { _sucess = int.TryParse(HttpContext.Current.Request.QueryString[paraName].ToString(), out result); if (!_sucess) { result = 1; } } else { result = 1; } return _sucess; } public static bool QueryString(string paraName, out string result) { bool _sucess = false; if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString[paraName])) { result = HttpContext.Current.Request.QueryString[paraName].ToString(); _sucess = true; } else { result = string.Empty; } return _sucess; }
用了这个方法之后,就可以对非法的传参进行过滤。但是还是有个问题,一般都是通过传参获取想文章或是文章列表这样的对象。假设通过这个参数获取出来的对象为空,那么在去调用时就会出项“未将对象引用到实例化”的异常。这步我还未实现,在此只是提出需求。通过传入的参数的key、获取对象的方法、异常处理的方法、传出对象。简单的说就是通过参数直接获取需要的对象。
- 参数的Key,可以直接在调用的时候输入
- 获取对象的方法,可以使用委托实现
- 异常处理的方法,可以使用委托实现
- 传出对象,可以使用返回值或是out传参