Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / Routing / PageRouteHandler.cs / 1305376 / PageRouteHandler.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Routing { using System; using System.Web.UI; using System.Web.Compilation; using System.Web.Security; using System.Security; using System.Security.Permissions; using System.Security.Principal; public class PageRouteHandler : IRouteHandler { public PageRouteHandler(string virtualPath) : this(virtualPath, true) { } public PageRouteHandler(string virtualPath, bool checkPhysicalUrlAccess) { if (string.IsNullOrEmpty(virtualPath) || !virtualPath.StartsWith("~/", StringComparison.OrdinalIgnoreCase)) { throw new ArgumentException(SR.GetString(SR.PageRouteHandler_InvalidVirtualPath), "virtualPath"); } this.VirtualPath = virtualPath; this.CheckPhysicalUrlAccess = checkPhysicalUrlAccess; _useRouteVirtualPath = VirtualPath.Contains("{"); } ////// This is the full virtual path (using tilde syntax) to the WebForm page. /// ////// Needs to be thread safe so this is only settable via ctor. /// public string VirtualPath { get; private set; } ////// Because we're not actually rewriting the URL, ASP.NET's URL Auth will apply /// to the incoming request URL and not the URL of the physical WebForm page. /// Setting this to true (default) will apply URL access rules against the /// physical file. /// ///True by default public bool CheckPhysicalUrlAccess { get; private set; } private bool _useRouteVirtualPath; private Route _routeVirtualPath; private Route RouteVirtualPath { get { if (_routeVirtualPath == null) { //Trim off ~/ _routeVirtualPath = new Route(VirtualPath.Substring(2), this); } return _routeVirtualPath; } } private bool CheckUrlAccess(string virtualPath, RequestContext requestContext) { IPrincipal user = requestContext.HttpContext.User; // If there's no authenticated user, use the default identity if (user == null) { user = new GenericPrincipal(new GenericIdentity(String.Empty, String.Empty), new string[0]); } return CheckUrlAccessWithAssert(virtualPath, requestContext, user); } [SecurityPermission(SecurityAction.Assert, Unrestricted = true)] private bool CheckUrlAccessWithAssert(string virtualPath, RequestContext requestContext, IPrincipal user) { return UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, requestContext.HttpContext.Request.HttpMethod); } public virtual IHttpHandler GetHttpHandler(RequestContext requestContext) { if (requestContext == null) { throw new ArgumentNullException("requestContext"); } string virtualPath = GetSubstitutedVirtualPath(requestContext); // Virtual Path ----s up with query strings, so we need to strip them off int qmark = virtualPath.IndexOf('?'); if (qmark != -1) { virtualPath = virtualPath.Substring(0, qmark); } if (this.CheckPhysicalUrlAccess && !CheckUrlAccess(virtualPath, requestContext)) { return new UrlAuthFailureHandler(); } Page page = BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as Page; return page; } ////// Gets the virtual path to the resource after applying substitutions based on route data. /// /// ///public string GetSubstitutedVirtualPath(RequestContext requestContext) { if (requestContext == null) { throw new ArgumentNullException("requestContext"); } if (!_useRouteVirtualPath) return VirtualPath; VirtualPathData vpd = RouteVirtualPath.GetVirtualPath(requestContext, requestContext.RouteData.Values); // if (vpd == null) return VirtualPath; return "~/" + vpd.VirtualPath; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ExpanderAutomationPeer.cs
- EdmEntityTypeAttribute.cs
- TemplateXamlParser.cs
- ILGenerator.cs
- NumberSubstitution.cs
- LambdaSerializationException.cs
- SymDocumentType.cs
- ContextMenuAutomationPeer.cs
- StylusDownEventArgs.cs
- XmlTextAttribute.cs
- TextParentUndoUnit.cs
- Utility.cs
- DependencySource.cs
- XmlSchemaAttributeGroup.cs
- FontUnit.cs
- GreaterThanOrEqual.cs
- ElementHostAutomationPeer.cs
- ValidatedControlConverter.cs
- XmlCharCheckingWriter.cs
- EntityContainerEmitter.cs
- ComplusEndpointConfigContainer.cs
- DataPagerFieldItem.cs
- EdmItemCollection.cs
- SqlUtil.cs
- ExpressionsCollectionConverter.cs
- TraceListeners.cs
- Viewport3DAutomationPeer.cs
- DecoderBestFitFallback.cs
- BuildProvider.cs
- PropertyValidationContext.cs
- StrokeNode.cs
- TaskFormBase.cs
- PieceDirectory.cs
- XmlMembersMapping.cs
- BypassElementCollection.cs
- ModifiableIteratorCollection.cs
- File.cs
- ReachDocumentReferenceSerializerAsync.cs
- PropertyItemInternal.cs
- AsymmetricAlgorithm.cs
- FileSystemInfo.cs
- ConfigurationValidatorAttribute.cs
- CutCopyPasteHelper.cs
- EncoderParameters.cs
- ChtmlMobileTextWriter.cs
- RuntimeHelpers.cs
- ImageDrawing.cs
- UrlMappingsSection.cs
- WebHttpSecurity.cs
- KeyTimeConverter.cs
- FontDifferentiator.cs
- KeyNotFoundException.cs
- HttpProcessUtility.cs
- CheckoutException.cs
- RuntimeIdentifierPropertyAttribute.cs
- InternalResources.cs
- WebHttpBindingElement.cs
- KnownTypeDataContractResolver.cs
- SqlServices.cs
- TypeSource.cs
- ImageDrawing.cs
- SoapExtensionImporter.cs
- WebAdminConfigurationHelper.cs
- SinglePhaseEnlistment.cs
- SingleStorage.cs
- DataTableClearEvent.cs
- WebBrowserSiteBase.cs
- HttpListenerContext.cs
- Calendar.cs
- StateWorkerRequest.cs
- ScriptReferenceBase.cs
- WebPartDescriptionCollection.cs
- TextPointer.cs
- XmlText.cs
- ImpersonateTokenRef.cs
- Renderer.cs
- ControlPager.cs
- CompensationToken.cs
- WhitespaceRule.cs
- KeyedHashAlgorithm.cs
- DataRowChangeEvent.cs
- DataServiceSaveChangesEventArgs.cs
- PageBreakRecord.cs
- WebEncodingValidator.cs
- FixUpCollection.cs
- CharUnicodeInfo.cs
- AssemblyResolver.cs
- PersistChildrenAttribute.cs
- EntityClassGenerator.cs
- ControllableStoryboardAction.cs
- EntityUtil.cs
- RangeValidator.cs
- TextPenaltyModule.cs
- DocumentGridPage.cs
- RegistryConfigurationProvider.cs
- FormatterConverter.cs
- CodeCatchClauseCollection.cs
- XDeferredAxisSource.cs
- Matrix3DValueSerializer.cs
- SafeCryptContextHandle.cs