在ASP.NET中转换/访问QueryString值我很好奇大家在ASP.NET中处理/抽象QueryString的工作。在我们的一些网络应用程序中,我在网站上看到了很多:intval=0;if(Request.QueryString["someKey"]!=null){val=Convert.ToInt32(Request.QueryString["someKey"]);有没有更好的方法来处理这种严重性?我倾向于将它们抽象为属性的想法。例如:publicintage{get{if(Request.QueryString["Age"]==null)return0;否则返回int.Parse(Request.QueryString["Age"]);如果你喜欢多重身份验证,你可以添加更多。但我倾向于以这种方式包装我所有的查询字符串变量。编辑:-另外,另一位发帖人指出您必须在每个页面上创建这些属性。我的回答是否定的,你没有。您可以在可以调用“QueryStrings”或类似内容的类中创建这些属性。然后,您可以在要访问查询字符串的每个页面中实例化此类,然后您可以执行类似varqueryStrings=newQueryStrings();之类的操作。varage=queryStrings.age;这样您就封装了所有逻辑,以便在单个可维护位置访问和处理每种类型的查询变量。EDIT2:-由于它是该类的一个实例,您还可以使用依赖注入在您使用它的每个地方注入QueryStrings类。StructureMap做得很好。如果您想进行自动单元测试,这还允许您模拟QueryStrings类并注入。比ASP.Net的Request对象更容易模拟它。一件事是你在这里没有捕获空白值。您可能有一个类似“http://example.com?someKey=&anotherKey=12345”的url,在这种情况下,“someKey”参数值为“”(空)。您可以使用string.IsNullOrEmpty()检查null和空状态。我还更改了“someKey”以存储在变量中。这样你就不会在多个地方重复文字字符串。它使维护更容易。整数值=0;字符串myKey="someKey";如果(!string.IsNullOrEmpty(Request.QueryString[myKey])){val=int.Parse(Request.QueryString[myKey]);}我希望这有帮助!Ian编写了一些辅助方法(库)来处理它...TryParse(nvCol[key],outkeyValue))keyValue=defaultValue;}或类似的东西......这就是我想出的。它使用泛型从QueryString返回强类型值,如果参数不在QueryString中,则使用可选的默认值://////获取给定的querystring参数作为指定值//////要转换的类型///Querystring参数名称的查询字符串值///如果未找到参数,则返回默认值///指定的值,如果未找到,则返回默认值publicstaticTGetValueFromQueryString(stringname,TdefaultValue)whereT:struct{if(String.IsNullOrEmpty(name)||HttpContext.Current==null||HttpContext.Current.Request==null)返回默认值;尝试{return(T)Convert.ChangeType(HttpContext.Current.Request.QueryString[name],typeof(T));}catch{返回默认值;}}//////获取给定的查询字符串参数作为指定值//////将查询字符串值转换为的类型///查询字符串参数名称///指定的值,或类型如果没有找到默认值publicstaticTGetValueFromQueryString(stringname)其中T:struct{returnGetValueFromQueryString(name,default(T));}自从写这篇文章以来,我已经编写了一个非常小的类库来操作查询字符串值–请参阅https://github.com/DanDiplo/QueryString-Helper我们一直在使用常量来保持所有这些“松散”键在一个中心位置:publicclassConstants{publicclassQueryString{publicconststringPostID="pid";publicconststringPostKey="key";}publicclassCookie{publicconststringUserID="mydomain.com-userid";}publicclassCache{publicconststringPagedPostList="PagedPostList-{0}-{1}";}publicclassContext{publicconststringPostID="PostID";}publicclassSecurity{publicconstRoleAdministrator="Administrator";}}这样你就可以很容易地访问你需要的常量:userID){StringcacheKey=String.Format(Constants.Cache.PagedPostList,userID,postID);返回Cache[cacheKey]作为IList;根据我的说法,获取查询字符串值的最佳方法如下:如果未找到查询字符串,则val的值将为0intval=0;int.TryParse(Request.QueryString["someKey"],outval);我和建议辅助方法的发帖人在一起(我会评论他,但还不能)。其他人不同意他赞成创建属性,但我的回答是它不能优雅地处理诸如检查空值或无效格式之类的事情。如果你有辅助方法,所有的逻辑都可以集中编写一次。如果您有很多页面,为每个页面添加属性可能会耗费更多时间。但这显然只是一种偏好,所以对每个人都是如此。另一个发布者的帮助方法可以改进的一件很酷的事情是将out参数更改为参考参数(更改为ref)。这样你就可以为属性设置一个默认值,以防它没有被传递。有时您可能需要可选参数,例如-然后您可以使用一些默认值来启动未显式传递可选参数的情况(比单独传递默认值更容易)。您甚至可以在末尾添加一个IsRequired布尔参数,如果将bool设置为true并且未传递任何参数,这将引发异常。在许多情况下,这可能会有帮助。以上就是《C#学习教程:在ASP.NET中转换/访问QueryString值》的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
