Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Routing / UrlRoutingModule.cs / 1305376 / UrlRoutingModule.cs
namespace System.Web.Routing { using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; using System.Web.Security; [TypeForwardedFrom("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] public class UrlRoutingModule : IHttpModule { private static readonly object _contextKey = new Object(); private static readonly object _requestDataKey = new Object(); private RouteCollection _routeCollection; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "This needs to be settable for unit tests.")] public RouteCollection RouteCollection { get { if (_routeCollection == null) { _routeCollection = RouteTable.Routes; } return _routeCollection; } set { _routeCollection = value; } } protected virtual void Dispose() { } protected virtual void Init(HttpApplication application) { ////////////////////////////////////////////////////////////////// // Check if this module has been already addded if (application.Context.Items[_contextKey] != null) { return; // already added to the pipeline } application.Context.Items[_contextKey] = _contextKey; // Ideally we would use the MapRequestHandler event. However, MapRequestHandler is not available // in II6 or IIS7 ISAPI Mode. Instead, we use PostResolveRequestCache, which is the event immediately // before MapRequestHandler. This allows use to use one common codepath for all versions of IIS. application.PostResolveRequestCache += OnApplicationPostResolveRequestCache; } private void OnApplicationPostResolveRequestCache(object sender, EventArgs e) { HttpContextBase context = new HttpContextWrapper(((HttpApplication)sender).Context); PostResolveRequestCache(context); } [Obsolete("This method is obsolete. Override the Init method to use the PostMapRequestHandler event.")] public virtual void PostMapRequestHandler(HttpContextBase context) { // Backwards compat with 3.5 which used to have code here to Rewrite the URL } public virtual void PostResolveRequestCache(HttpContextBase context) { // Match the incoming URL against the route table RouteData routeData = RouteCollection.GetRouteData(context); // Do nothing if no route found if (routeData == null) { return; } // If a route was found, get an IHttpHandler from the route's RouteHandler IRouteHandler routeHandler = routeData.RouteHandler; if (routeHandler == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, SR.GetString(SR.UrlRoutingModule_NoRouteHandler))); } // This is a special IRouteHandler that tells the routing module to stop processing // routes and to let the fallback handler handle the request. if (routeHandler is StopRoutingHandler) { return; } RequestContext requestContext = new RequestContext(context, routeData); // Dev10 766875 Adding RouteData to HttpContext context.Request.RequestContext = requestContext; IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext); if (httpHandler == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, SR.GetString(SR.UrlRoutingModule_NoHttpHandler), routeHandler.GetType())); } if (httpHandler is UrlAuthFailureHandler) { if (FormsAuthenticationModule.FormsAuthRequired) { UrlAuthorizationModule.ReportUrlAuthorizationFailure(HttpContext.Current, this); return; } else { throw new HttpException(401, SR.GetString(SR.Assess_Denied_Description3)); } } // Remap IIS7 to our handler context.RemapHandler(httpHandler); } #region IHttpModule Members void IHttpModule.Dispose() { Dispose(); } void IHttpModule.Init(HttpApplication application) { Init(application); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Web.Routing { using System.Diagnostics; using System.Globalization; using System.Runtime.CompilerServices; using System.Web.Security; [TypeForwardedFrom("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] public class UrlRoutingModule : IHttpModule { private static readonly object _contextKey = new Object(); private static readonly object _requestDataKey = new Object(); private RouteCollection _routeCollection; [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly", Justification = "This needs to be settable for unit tests.")] public RouteCollection RouteCollection { get { if (_routeCollection == null) { _routeCollection = RouteTable.Routes; } return _routeCollection; } set { _routeCollection = value; } } protected virtual void Dispose() { } protected virtual void Init(HttpApplication application) { ////////////////////////////////////////////////////////////////// // Check if this module has been already addded if (application.Context.Items[_contextKey] != null) { return; // already added to the pipeline } application.Context.Items[_contextKey] = _contextKey; // Ideally we would use the MapRequestHandler event. However, MapRequestHandler is not available // in II6 or IIS7 ISAPI Mode. Instead, we use PostResolveRequestCache, which is the event immediately // before MapRequestHandler. This allows use to use one common codepath for all versions of IIS. application.PostResolveRequestCache += OnApplicationPostResolveRequestCache; } private void OnApplicationPostResolveRequestCache(object sender, EventArgs e) { HttpContextBase context = new HttpContextWrapper(((HttpApplication)sender).Context); PostResolveRequestCache(context); } [Obsolete("This method is obsolete. Override the Init method to use the PostMapRequestHandler event.")] public virtual void PostMapRequestHandler(HttpContextBase context) { // Backwards compat with 3.5 which used to have code here to Rewrite the URL } public virtual void PostResolveRequestCache(HttpContextBase context) { // Match the incoming URL against the route table RouteData routeData = RouteCollection.GetRouteData(context); // Do nothing if no route found if (routeData == null) { return; } // If a route was found, get an IHttpHandler from the route's RouteHandler IRouteHandler routeHandler = routeData.RouteHandler; if (routeHandler == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, SR.GetString(SR.UrlRoutingModule_NoRouteHandler))); } // This is a special IRouteHandler that tells the routing module to stop processing // routes and to let the fallback handler handle the request. if (routeHandler is StopRoutingHandler) { return; } RequestContext requestContext = new RequestContext(context, routeData); // Dev10 766875 Adding RouteData to HttpContext context.Request.RequestContext = requestContext; IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext); if (httpHandler == null) { throw new InvalidOperationException( String.Format( CultureInfo.CurrentUICulture, SR.GetString(SR.UrlRoutingModule_NoHttpHandler), routeHandler.GetType())); } if (httpHandler is UrlAuthFailureHandler) { if (FormsAuthenticationModule.FormsAuthRequired) { UrlAuthorizationModule.ReportUrlAuthorizationFailure(HttpContext.Current, this); return; } else { throw new HttpException(401, SR.GetString(SR.Assess_Denied_Description3)); } } // Remap IIS7 to our handler context.RemapHandler(httpHandler); } #region IHttpModule Members void IHttpModule.Dispose() { Dispose(); } void IHttpModule.Init(HttpApplication application) { Init(application); } #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
- AggregateNode.cs
- ExpandedWrapper.cs
- HttpModule.cs
- ElementsClipboardData.cs
- EntityDataSourceConfigureObjectContext.cs
- HtmlLink.cs
- ProviderUtil.cs
- DataSourceControlBuilder.cs
- MetadataElement.cs
- ObjectListFieldCollection.cs
- SerializerProvider.cs
- NetMsmqSecurityMode.cs
- Vector3DAnimationUsingKeyFrames.cs
- ProfileSection.cs
- StyleCollection.cs
- Renderer.cs
- BitmapEffectGeneralTransform.cs
- BrowserCapabilitiesFactory.cs
- EventRoute.cs
- ListDataBindEventArgs.cs
- EventLogger.cs
- AcceptorSessionSymmetricTransportSecurityProtocol.cs
- TcpProcessProtocolHandler.cs
- ZipIOLocalFileBlock.cs
- IsolatedStorageFilePermission.cs
- BaseTemplateCodeDomTreeGenerator.cs
- StorageRoot.cs
- DeviceContext2.cs
- TableDetailsCollection.cs
- KeyEventArgs.cs
- Script.cs
- MsmqIntegrationProcessProtocolHandler.cs
- KeyboardEventArgs.cs
- XPathSelfQuery.cs
- AuthenticationModulesSection.cs
- RewritingSimplifier.cs
- EntityDataSourceSelectedEventArgs.cs
- CustomSignedXml.cs
- LongPath.cs
- AuthStoreRoleProvider.cs
- BuildResultCache.cs
- InternalBase.cs
- TemplateField.cs
- RSAProtectedConfigurationProvider.cs
- AnalyzedTree.cs
- MasterPageParser.cs
- BoundColumn.cs
- ObfuscateAssemblyAttribute.cs
- UrlAuthorizationModule.cs
- UniqueIdentifierService.cs
- BridgeDataReader.cs
- LinqTreeNodeEvaluator.cs
- ObjectHelper.cs
- SimpleExpression.cs
- PageSettings.cs
- NativeMethodsOther.cs
- ConfigXmlElement.cs
- HierarchicalDataSourceControl.cs
- MatrixTransform3D.cs
- SiteMapNodeCollection.cs
- DataServiceEntityAttribute.cs
- DefaultTraceListener.cs
- WebServiceEnumData.cs
- Privilege.cs
- CatalogZone.cs
- XNodeValidator.cs
- DocumentSequenceHighlightLayer.cs
- ArrayWithOffset.cs
- EndpointDispatcher.cs
- SharedStatics.cs
- JournalNavigationScope.cs
- EntityDataSourceEntityTypeFilterItem.cs
- TriggerCollection.cs
- StreamGeometryContext.cs
- FormsAuthenticationUser.cs
- CodeMethodInvokeExpression.cs
- WebInvokeAttribute.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- documentation.cs
- HashMembershipCondition.cs
- SizeF.cs
- FileRegion.cs
- xamlnodes.cs
- UrlPropertyAttribute.cs
- CodeThrowExceptionStatement.cs
- PassportAuthenticationEventArgs.cs
- MultiByteCodec.cs
- LockCookie.cs
- MailAddressParser.cs
- PolicyChain.cs
- GrammarBuilderWildcard.cs
- SafeNativeMemoryHandle.cs
- StrokeNodeEnumerator.cs
- XmlSchemaComplexContentRestriction.cs
- UInt64Storage.cs
- FormatterServices.cs
- SpeechRecognitionEngine.cs
- SplitContainer.cs
- ArraySubsetEnumerator.cs
- DataGridDetailsPresenter.cs