You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
98
external/referencesource/System.Web/ModelBinding/CookieValueProvider.cs
vendored
Normal file
98
external/referencesource/System.Web/ModelBinding/CookieValueProvider.cs
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
namespace System.Web.ModelBinding {
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
|
||||
public sealed class CookieValueProvider : IValueProvider, IUnvalidatedValueProvider {
|
||||
|
||||
private readonly CultureInfo _culture;
|
||||
private readonly PrefixContainer _prefixes;
|
||||
private readonly Dictionary<string, ValueProviderResultPlaceholder> _values = new Dictionary<string, ValueProviderResultPlaceholder>(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly HttpCookieCollection _validatedCollection;
|
||||
private readonly HttpCookieCollection _unvalidatedCollection;
|
||||
|
||||
public CookieValueProvider(ModelBindingExecutionContext modelBindingExecutionContext)
|
||||
: this(modelBindingExecutionContext, modelBindingExecutionContext.HttpContext.Request.Unvalidated) {
|
||||
}
|
||||
|
||||
internal CookieValueProvider(ModelBindingExecutionContext modelBindingExecutionContext, UnvalidatedRequestValuesBase unvalidatedValues)
|
||||
: this(modelBindingExecutionContext.HttpContext.Request.Cookies, unvalidatedValues.Cookies, CultureInfo.CurrentCulture) {
|
||||
}
|
||||
|
||||
internal CookieValueProvider(HttpCookieCollection collection, HttpCookieCollection unvalidatedCollection, CultureInfo culture) {
|
||||
if (collection == null) {
|
||||
throw new ArgumentNullException("collection");
|
||||
}
|
||||
|
||||
_culture = culture;
|
||||
_prefixes = new PrefixContainer(collection.Keys.Cast<string>());
|
||||
_validatedCollection = collection;
|
||||
_unvalidatedCollection = unvalidatedCollection ?? collection;
|
||||
|
||||
foreach (string key in collection) {
|
||||
if (key != null) {
|
||||
_values[key] = new ValueProviderResultPlaceholder(key, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool ContainsPrefix(string prefix) {
|
||||
if (prefix == null) {
|
||||
throw new ArgumentNullException("prefix");
|
||||
}
|
||||
|
||||
return _prefixes.ContainsPrefix(prefix);
|
||||
}
|
||||
|
||||
public ValueProviderResult GetValue(string key) {
|
||||
return GetValue(key, skipValidation: false);
|
||||
}
|
||||
|
||||
public ValueProviderResult GetValue(string key, bool skipValidation) {
|
||||
if (key == null) {
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
|
||||
ValueProviderResultPlaceholder placeholder;
|
||||
_values.TryGetValue(key, out placeholder);
|
||||
if (placeholder == null) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return (skipValidation) ? placeholder.UnvalidatedResult : placeholder.ValidatedResult;
|
||||
}
|
||||
}
|
||||
|
||||
// Placeholder that can store a validated (in relation to request validation) or unvalidated
|
||||
// ValueProviderResult for a given key.
|
||||
private sealed class ValueProviderResultPlaceholder {
|
||||
private readonly Func<ValueProviderResult> _validatedResultAccessor;
|
||||
private readonly Func<ValueProviderResult> _unvalidatedResultAccessor;
|
||||
private ValueProviderResult _validatedResult;
|
||||
private ValueProviderResult _unvalidatedResult;
|
||||
|
||||
public ValueProviderResultPlaceholder(string key, CookieValueProvider valueProvider) {
|
||||
_validatedResultAccessor = () => GetResultFromCollection(key, valueProvider, useValidatedCollection: true);
|
||||
_unvalidatedResultAccessor = () => GetResultFromCollection(key, valueProvider, useValidatedCollection: false);
|
||||
}
|
||||
|
||||
private static ValueProviderResult GetResultFromCollection(string key, CookieValueProvider valueProvider, bool useValidatedCollection) {
|
||||
HttpCookieCollection collection = (useValidatedCollection) ? valueProvider._validatedCollection : valueProvider._unvalidatedCollection;
|
||||
string value = collection[key].Value;
|
||||
return new ValueProviderResult(value, value, valueProvider._culture);
|
||||
|
||||
}
|
||||
|
||||
public ValueProviderResult ValidatedResult {
|
||||
get { return LazyInitializer.EnsureInitialized(ref _validatedResult, _validatedResultAccessor); }
|
||||
}
|
||||
|
||||
public ValueProviderResult UnvalidatedResult {
|
||||
get { return LazyInitializer.EnsureInitialized(ref _unvalidatedResult, _unvalidatedResultAccessor); }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user