解析QueryString时如何保留参数的原始大小写?
问题:如何获取QueryString中与原始参数大小写完全一致的参数值?
问题场景
我执行了以下代码:
string checkUrl = HttpContext.Current.Request.Url.AbsoluteUri.ToLower(); Uri AbsoluteUri = new Uri(checkUrl);
此时checkUrl的值为 https://domain.co.il/HtmlPage.aspx?l=https://domain.co.il/uploads/Untitled-4-1024x377.png,而实际存在的资源链接是 https://domain.co.il/uploads/Untitled-4-1024x377.png(其中U为大写)。
当使用以下代码获取QueryString参数时:
string L = HttpUtility.ParseQueryString(AbsoluteUri.Query).Get("L");
得到的L值为 https://domain.co.il/uploads/untitled-4-1024x377.png(其中u为小写),无法匹配到正确的资源。
解决方案
问题根源在于你将整个URL转成了小写,导致QueryString里的参数值也被修改了。要保留原始参数的大小写,可按以下方式修改:
方案1:避免对整个URL转小写
直接使用原始URL构造Uri,不做全局小写转换:
Uri absoluteUri = HttpContext.Current.Request.Url; string l = HttpUtility.ParseQueryString(absoluteUri.Query).Get("l");
此时获取到的l会保留原始参数的大小写,即https://domain.co.il/uploads/Untitled-4-1024x377.png。
方案2:单独处理URL路径(需保留路径小写时)
如果业务需要将URL的路径部分转小写,但要保留QueryString的原始大小写,可以拆分URL各部分分别处理:
var originalUrl = HttpContext.Current.Request.Url; // 仅将路径转小写 string lowerCasePath = originalUrl.AbsolutePath.ToLower(); // 拼接回完整URL,保留原始QueryString Uri absoluteUri = new Uri(originalUrl.Scheme + "://" + originalUrl.Authority + lowerCasePath + originalUrl.Query); string l = HttpUtility.ParseQueryString(absoluteUri.Query).Get("l");
方案3:直接从Request.QueryString获取(最简便)
直接通过Request.QueryString获取原始参数值,这是最直接的方式,无需额外处理:
string l = HttpContext.Current.Request.QueryString["l"];
Request.QueryString会直接返回客户端传入的原始参数内容,不会修改任何大小写。
内容的提问来源于stack exchange,提问作者Amen
相关产品推荐
相关产品推荐

