Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Routing / HttpMethodConstraint.cs / 1305376 / HttpMethodConstraint.cs
namespace System.Web.Routing {
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.CompilerServices;
[TypeForwardedFrom("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")]
public class HttpMethodConstraint : IRouteConstraint {
public HttpMethodConstraint(params string[] allowedMethods) {
if (allowedMethods == null) {
throw new ArgumentNullException("allowedMethods");
}
AllowedMethods = allowedMethods.ToList().AsReadOnly();
}
public ICollection AllowedMethods {
get;
private set;
}
protected virtual bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
if (route == null) {
throw new ArgumentNullException("route");
}
if (parameterName == null) {
throw new ArgumentNullException("parameterName");
}
if (values == null) {
throw new ArgumentNullException("values");
}
switch (routeDirection) {
case RouteDirection.IncomingRequest:
return AllowedMethods.Any(method => String.Equals(method, httpContext.Request.HttpMethod,
StringComparison.OrdinalIgnoreCase));
case RouteDirection.UrlGeneration:
// We need to see if the user specified the HTTP method explicitly. Consider these two routes:
//
// a) Route: Url = "/{foo}", Constraints = { httpMethod = new HttpMethodConstraint("GET") }
// b) Route: Url = "/{foo}", Constraints = { httpMethod = new HttpMethodConstraint("POST") }
//
// A user might know ahead of time that a URL he is generating might be used with a particular HTTP
// method. If a URL will be used for an HTTP POST but we match on (a) while generating the URL, then
// the HTTP GET-specific route will be used for URL generation, which might have undesired behavior.
// To prevent this, a user might call RouteCollection.GetVirtualPath(..., { httpMethod = "POST" }) to
// signal that he is generating a URL that will be used for an HTTP POST, so he wants the URL
// generation to be performed by the (b) route instead of the (a) route, consistent with what would
// happen on incoming requests.
object parameterValue;
if (!values.TryGetValue(parameterName, out parameterValue)) {
return true;
}
string parameterValueString = parameterValue as string;
if (parameterValueString == null) {
throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture,
SR.GetString(SR.HttpMethodConstraint_ParameterValueMustBeString), parameterName, route.Url));
}
return AllowedMethods.Any(method => String.Equals(method, parameterValueString,
StringComparison.OrdinalIgnoreCase));
default:
return true;
}
}
#region IRouteConstraint Members
bool IRouteConstraint.Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
return Match(httpContext, route, parameterName, values, routeDirection);
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PasswordTextNavigator.cs
- EndpointIdentityConverter.cs
- SplineQuaternionKeyFrame.cs
- Vector3DCollection.cs
- SQLMoneyStorage.cs
- XmlSchemaSet.cs
- ResourceDisplayNameAttribute.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- RSAPKCS1SignatureFormatter.cs
- dataprotectionpermissionattribute.cs
- OrderingInfo.cs
- AdornedElementPlaceholder.cs
- EncoderFallback.cs
- XmlSchemaSimpleContentRestriction.cs
- SchemaEntity.cs
- FormsAuthentication.cs
- Double.cs
- ProcessThreadCollection.cs
- ValueCollectionParameterReader.cs
- TreeViewEvent.cs
- ClientTarget.cs
- MultipleCopiesCollection.cs
- CompileLiteralTextParser.cs
- FrameDimension.cs
- ConvertersCollection.cs
- SqlNodeAnnotation.cs
- DelegateHelpers.Generated.cs
- XmlWriter.cs
- GraphicsContainer.cs
- SelectingProviderEventArgs.cs
- ConfigXmlText.cs
- ArrayExtension.cs
- CategoryGridEntry.cs
- HandlerElementCollection.cs
- WeakReferenceEnumerator.cs
- PowerModeChangedEventArgs.cs
- CommandHelper.cs
- ProjectionQueryOptionExpression.cs
- SiteMembershipCondition.cs
- DrawingVisualDrawingContext.cs
- SafeNativeMethods.cs
- ClientFormsAuthenticationCredentials.cs
- DocumentSequenceHighlightLayer.cs
- IsolationInterop.cs
- ApplicationInfo.cs
- XamlReaderHelper.cs
- ToolTip.cs
- RectangleHotSpot.cs
- FixedPage.cs
- TablePattern.cs
- DatatypeImplementation.cs
- SuppressIldasmAttribute.cs
- Propagator.ExtentPlaceholderCreator.cs
- SqlConnectionHelper.cs
- EntityReference.cs
- DiagnosticTrace.cs
- TextElement.cs
- RawStylusSystemGestureInputReport.cs
- XmlNamedNodeMap.cs
- SafeIUnknown.cs
- DependentList.cs
- CodeTypeParameter.cs
- QilGeneratorEnv.cs
- EditorServiceContext.cs
- TypeToken.cs
- SystemIPv4InterfaceProperties.cs
- NamedObject.cs
- HMACRIPEMD160.cs
- FileVersionInfo.cs
- AggregateNode.cs
- PageBuildProvider.cs
- DodSequenceMerge.cs
- Stack.cs
- ListControlConvertEventArgs.cs
- SQLDoubleStorage.cs
- ListBoxAutomationPeer.cs
- DecoderReplacementFallback.cs
- SafeRightsManagementSessionHandle.cs
- TextBoxRenderer.cs
- HttpRuntime.cs
- SafeCoTaskMem.cs
- XmlAttribute.cs
- SqlMethodCallConverter.cs
- WebRequestModulesSection.cs
- LockingPersistenceProvider.cs
- PipeException.cs
- TdsParserStaticMethods.cs
- SyntaxCheck.cs
- RtType.cs
- NewExpression.cs
- HitTestWithPointDrawingContextWalker.cs
- cryptoapiTransform.cs
- Control.cs
- MembershipUser.cs
- TagMapCollection.cs
- ObjectStateManager.cs
- TraceListeners.cs
- PasswordPropertyTextAttribute.cs
- OracleCommandBuilder.cs
- XmlSerializerOperationGenerator.cs