当前位置: 首页 > 编程语言 > C#

C#ASP.NETQueryStringParser分享

时间:2023-04-11 03:08:01 C#

C#ASP.NETQueryStringParser如果您一直在寻找一种干净整洁的方法来解析查询字符串值,我想到了这个://///Parses查询字符串并返回有效值。/////////查询字符串键。///价值。protectedinternalTParseQueryStringValue(stringkey,stringvalue){if(!string.IsNullOrEmpty(value)){//TODO:MapothercommonQueryStringparameterstype...if(typeof(T)==typeof(string)){返回(T)Convert.ChangeType(值,typeof(T));}if(typeof(T)==typeof(int)){inttempValue;if(!int.TryParse(value,outtempValue)){thrownewApplicationException(string.Format("无效的QueryString参数{0}。值"+"'{1}'不是有效的{2}类型。",键,值,"int"));}返回(T)Convert.ChangeType(tempValue,typeof(T));}if(typeof(T)==typeof(DateTime)){DateTimetempValue;if(!DateTime.TryParse(value,outtempValue)){thrownewApplicationException(string.Format("无效的QueryString参数{0}。值"+"'{1}'i不是有效的{2}类型。",key,value,"DateTime"));}return(T)Convert.ChangeType(tempValue,typeof(T));}}returndefault(T);}我已经一直想要有这样的东西,终于做对了……至少我是这么认为的……代码应该是自我解释的……任何让它变得更好的评论或建议都值得赞赏一种简单的解析方法(如果你不t想要类型转换)是HttpUtility.ParseQueryString(queryString);您可以使用newUri(url).Query从URL中提取查询字符串鉴于您只处理三种不同的类型,我推荐三种不同的方法-当泛型当它们应用于类型约束允许的每个类型参数时,方法效果最好。另外,我强烈建议您指定要在int和DateTime中使用的文化——它不应该真正取决于您的服务器所在的文化。(如果你有代码来猜测用户的文化,你可以做相反的事情。)最后,我还建议支持一组明确指定的DateTime格式,而不仅仅是TryParse支持的默认格式。(我几乎总是使用ParseExact/TryParseExact而不是Parse/TryParse。)请注意,字符串版本实际上不需要做任何事情,因为该值已经是一个字符串(尽管您当前的代码将“”转换为null,这可能或可能不是你想要的)。我写了下面的方法来将QueryString解析为强类型值:publicstaticboolTryGetValue(stringkey,outTvalue,IFormatProviderprovider){if(queryStringValue!=null){//找到值,尝试改变类型try{value=(T)Convert.ChangeType(queryStringValue,typeof(T),provider);返回真;}catch{//无法更改类型}}//未找到值,返回默认值=default(T);返回假;}使用示例:intproductId=0;boolsuccess=TryGetValue("ProductId",outproductId,CultureInfo.CurrentCulture);对于?productId=5查询字符串,bool为true,intproductId等于5。对于?productId=hello的查询字符串,bool将为false,intproductId将等于0。对于查询字符串?noProductId=notIncludedbool将为false,intproductId将等于0。在我的应用程序中,我一直在使用以下函数:返回o==null?默认值:(T)o;如果未提供任何参数,则返回所需的默认值,从defaultValue推断类型并在必要时抛出转换异常。用法如下:-varfoo=WebUtil.GetValue("foo",ViewState,default(int?));这是一个古老的答案,但我做了以下操作:stringqueryString=relayState.Split("?")。元素(1);NameValueCollectionnvc=HttpUtility.ParseQueryString(queryString);在我看来,您正在做很多无聊的类型转换。tempValue变量是您尝试返回的类型的主要变量。同样在字符串的情况下,该值已经是一个字符串,因此只需返回它即可。根据Ronalds的回答,我更新了自己的查询字符串解析方法。我使用它的方式是将它作为扩展方法添加到Page对象上,这样我就可以轻松检查查询字符串值和类型,如果页面请求无效则重定向。扩展方法如下所示:如果(String.IsNullOrEmpty(QueryStringValue)){page.Response.RedirectPermanent(RedirectUrl);}try{Tvalue=(T)Convert.ChangeType(QueryStringValue,typeof(T));}catch{page.Response.RedirectPermanent(RedirectUrl);}}}这允许我做类似的事情:然后我可以编写其余的代码并依赖于存在且正确的查询字符串项,这样我就不必在每次要访问它时都对其进行测试。注意:如果你使用的是.net4,那么你还需要以下RedirectPermanent扩展方法:以上是C#学习教程分享的全部内容:C#ASP.NETQueryString解析器,如果对大家有用需要了解一下more关于C#学习教程,希望大家多多关注—publicstaticclassHttpResponseHelpers{publicstaticvoidRedirectPermanent(thisSystem.Web.HttpResponseresponse,stringuri){response.StatusCode=301;response.StatusDescription="永久移动";response.AddHeader("位置",uri);响应。结束();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: