forked from aspnet/AspNetWebStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCookieState.cs
More file actions
135 lines (116 loc) · 3.73 KB
/
Copy pathCookieState.cs
File metadata and controls
135 lines (116 loc) · 3.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Specialized;
using System.Diagnostics.Contracts;
using System.Net.Http.Formatting.Internal;
using System.Web.Http;
namespace System.Net.Http.Headers
{
public class CookieState : ICloneable
{
private string _name;
private NameValueCollection _values = HttpValueCollection.Create();
public CookieState(string name)
: this(name, String.Empty)
{
}
public CookieState(string name, string value)
{
CheckNameFormat(name, "name");
_name = name;
CheckValueFormat(value, "value");
Value = value;
}
public CookieState(string name, NameValueCollection values)
{
CheckNameFormat(name, "name");
_name = name;
if (values == null)
{
throw Error.ArgumentNull("values");
}
Values.Add(values);
}
private CookieState(CookieState source)
{
Contract.Requires(source != null);
_name = source._name;
if (source._values != null)
{
Values.Add(source._values);
}
}
public string Name
{
get { return _name; }
set
{
CheckNameFormat(value, "value");
_name = value;
}
}
/// <summary>
/// If the cookie data is a simple string value then set or retrieve it using the <see cref="Value"/> property.
/// If the cookie data is structured then use the <see cref="Values"/> property.
/// </summary>
public string Value
{
get
{
return Values.Count > 0 ? Values.AllKeys[0] : String.Empty;
}
set
{
CheckValueFormat(value, "value");
if (Values.Count > 0)
{
Values.AllKeys[0] = value;
}
else
{
Values.Add(value, String.Empty);
}
}
}
/// <summary>
/// If the cookie data is structured then use the <see cref="Values"/> property for setting and getting individual sub-name/value pairs.
/// If the cookie data is a simple string value then set or retrieve it using the <see cref="Value"/> property.
/// </summary>
public NameValueCollection Values
{
get { return _values; }
}
public string this[string subName]
{
get { return Values[subName]; }
set { Values[subName] = value; }
}
public override string ToString()
{
return _name + "=" + (_values != null ? _values.ToString() : String.Empty);
}
public object Clone()
{
return new CookieState(this);
}
private static void CheckNameFormat(string name, string parameterName)
{
if (name == null)
{
throw Error.ArgumentNull("name");
}
if (!FormattingUtilities.ValidateHeaderToken(name))
{
throw Error.Argument(parameterName, Properties.Resources.CookieInvalidName);
}
}
private static void CheckValueFormat(string value, string parameterName)
{
// Empty string is a valid cookie value
if (value == null)
{
throw Error.ArgumentNull(parameterName);
}
}
}
}