关于通过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获取对象的方法异常处理的方法传出对象。简单的说就是通过参数直接获取需要的对象。

  1. 参数的Key,可以直接在调用的时候输入
  2. 获取对象的方法,可以使用委托实现
  3. 异常处理的方法,可以使用委托实现
  4. 传出对象,可以使用返回值或是out传参

 

posted @ 2010-08-21 23:10  吕飞  阅读(2113)  评论(0编辑  收藏  举报