如何使用C#从类似QueryString的字符串中提取值?

时间:2011-06-29 14:07:34

标签: c# asp.net regex

我有一个ASP.NET页面,其值存储在会话对象中。

我想为特定键提取一个值 - 但请记住它只是一个字符串。

以下面的字符串为例 - 从这个字符串中获取“FOOBAR”的最佳方法是什么?正则表达式是最好的方法吗?

有时会出现这种情况:

"?facets=All Groups||Brand&TitleTag=FOOBAR#back"

其他时候它可能会出现这种情况:

"?facets=All Groups||Brand&TitleTag=FOOBAR"

更新:解决方案

感谢jglouie使用'ParseQueryString'的想法 - 最终成功了。您提供的代码示例是一个良好的开端。以下是我的最终解决方案:

System.Collections.Specialized.NameValueCollection pairs = HttpUtility.ParseQueryString(facetStateOrURL);
string titleTagValue = pairs["TitleTag"];
if (!String.IsNullOrEmpty(titleTagValue) && titleTagValue.IndexOf('#') > -1)
{
    titleTagValue = titleTagValue.Substring(0, titleTagValue.IndexOf('#'));
}

再次感谢您的帮助!

2 个答案:

答案 0 :(得分:9)

HttpUtility的ParseQueryString()方法怎么样?

http://msdn.microsoft.com/en-us/library/ms150046.aspx

-

根据Jethro的建议添加样本:

var string1 = "?facets=All Groups||Brand&TitleTag=FOOBAR#back";
var pairs = HttpUtility.ParseQueryString(string1);

string titleTagValue = pairs["TitleTag"];

if (!string.IsNullOrEmpty(titleTagValue) && titleTagValue.IndexOf('#') > -1)
{
    titleTagValue = titleTagValue.Substring(0, titleTagValue.IndexOf('#'));
}

答案 1 :(得分:0)

看起来您正在抓取页面请求查询字符串并在某个时候将其添加到会话容器中。你不是只需要抓住整个查询字符串并将它放入seeion中就可以获取所需的部分字符串并将其保存到特定的会话密钥中吗?

例如:

Session["TitleTag"] = Request.QueryString["TitleTag"]

然后您可以在需要时引用Session [“TitleTag”]。这样您就不必解析字符串,并且会话中包含的数据更具自我描述性。