如何解析set-cookie标头中的名称 - 值对?

时间:2013-03-22 19:43:55

标签: c# .net vb.net string parsing

我正在寻找一种干净的方法来解析httpwebrequest对象中的set-cookie头中的2个变量。

Set-Cookie标头中的字符串如下:

X-Mapping-dmogknml=6652DD088AB10EE6A65DD9C700872364;
path=/,ASP.NET_SessionId=f4jg1h55eoqbdk452blsozfl; path=/;
HttpOnly,id=111,status=rejected; expires=Thu, 21-Mar-2013 07:31:55 GMT; path=/,statusDes=
Validation Failed ; expires=Thu, 21-Mar-2013 07:31:55 GMT; path=/,X-Mapping
dmogknml=dmogknml=6652DD088AB10EE6A65DD9C700872; path=/

我基本上想从“status =拒绝”和“验证失败”中将“statusDes = Validation Failed”中的“拒绝”解析为2个字符串变量。我已经找到了2个解决方案,但它们看起来有点笨重:

  1. 在“;”上循环和拆分,然后拆分为“,”,然后拆分为“=”。
  2. 使用子字符串。
  3. 请告知。

2 个答案:

答案 0 :(得分:3)

您可以使用Split的重载,其中包含Char

的集合
 var values = theCookie.Split(new [] {';', ',', '='}, 
                              StringSplitOptions.RemoveEmptyEntries);

然后,您可以一次遍历values两个,查找获取值的键,或者您可以先转换为字典(使用LINQ ToDictionary)。

答案 1 :(得分:0)

尝试使用Regular Expressions

这应该这样做(VB代码):

Dim Pattern As String = "status=(?<Status>.*?);.*?statusDes=(?<StatusDes>.*?);"
Dim m As Match = Regex.Match(input:=MyData, pattern:=Pattern , options:=RegexOptions.IgnoreCase + RegexOptions.Singleline)
Dim Status as String
Dim StatusDes as String

    Status = m.Groups("Status").ToString
    StatusDes = m.Groups("StatusDes").ToString

请记住导入Imports System.Text.RegularExpressions

希望有帮助!