| File: ApplicationModels\PageRouteModel.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.RazorPages\src\Microsoft.AspNetCore.Mvc.RazorPages.csproj (Microsoft.AspNetCore.Mvc.RazorPages) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Linq; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Routing; namespace Microsoft.AspNetCore.Mvc.ApplicationModels; /// <summary> /// A model component for routing RazorPages. /// </summary> public class PageRouteModel { /// <summary> /// Initializes a new instance of <see cref="PageRouteModel"/>. /// </summary> /// <param name="relativePath">The application relative path of the page.</param> /// <param name="viewEnginePath">The path relative to the base path for page discovery.</param> public PageRouteModel(string relativePath, string viewEnginePath) : this(relativePath, viewEnginePath, areaName: null) { } /// <summary> /// Initializes a new instance of <see cref="PageRouteModel"/>. /// </summary> /// <param name="relativePath">The application relative path of the page.</param> /// <param name="viewEnginePath">The path relative to the base path for page discovery.</param> /// <param name="areaName">The area name.</param> public PageRouteModel(string relativePath, string viewEnginePath, string? areaName) { RelativePath = relativePath ?? throw new ArgumentNullException(nameof(relativePath)); ViewEnginePath = viewEnginePath ?? throw new ArgumentNullException(nameof(viewEnginePath)); AreaName = areaName; Properties = new Dictionary<object, object?>(); Selectors = new List<SelectorModel>(); RouteValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); } /// <summary> /// A copy constructor for <see cref="PageRouteModel"/>. /// </summary> /// <param name="other">The <see cref="PageRouteModel"/> to copy from.</param> public PageRouteModel(PageRouteModel other) { ArgumentNullException.ThrowIfNull(other); RelativePath = other.RelativePath; ViewEnginePath = other.ViewEnginePath; AreaName = other.AreaName; RouteParameterTransformer = other.RouteParameterTransformer; Properties = new Dictionary<object, object?>(other.Properties); Selectors = new List<SelectorModel>(other.Selectors.Select(m => new SelectorModel(m))); RouteValues = new Dictionary<string, string>(other.RouteValues, StringComparer.OrdinalIgnoreCase); } /// <summary> /// Gets the application root relative path for the page. /// </summary> public string RelativePath { get; } /// <summary> /// Gets the path relative to the base path for page discovery. /// <para> /// This value is the path of the file without extension, relative to the pages root directory. /// e.g. the <see cref="ViewEnginePath"/> for the file /Pages/Catalog/Antiques.cshtml is <c>/Catalog/Antiques</c> /// </para> /// <para> /// In an area, this value is the path of the file without extension, relative to the pages root directory for the specified area. /// e.g. the <see cref="ViewEnginePath"/> for the file Areas/Identity/Pages/Manage/Accounts.cshtml, is <c>/Manage/Accounts</c>. /// </para> /// </summary> public string ViewEnginePath { get; } /// <summary> /// Gets the area name. Will be <c>null</c> for non-area pages. /// </summary> public string? AreaName { get; } /// <summary> /// Stores arbitrary metadata properties associated with the <see cref="PageRouteModel"/>. /// </summary> public IDictionary<object, object?> Properties { get; } /// <summary> /// Gets the <see cref="SelectorModel"/> instances. /// </summary> public IList<SelectorModel> Selectors { get; } /// <summary> /// Gets a collection of route values that must be present in the <see cref="RouteData.Values"/> /// for the corresponding page to be selected. /// </summary> /// <remarks> /// <para> /// The value of <see cref="ViewEnginePath"/> is considered an implicit route value corresponding /// to the key <c>page</c>. /// </para> /// <para> /// The value of <see cref="AreaName"/> is considered an implicit route value corresponding /// to the key <c>area</c> when <see cref="AreaName"/> is not <c>null</c>. /// </para> /// <para> /// These entries will be implicitly added to <see cref="ActionDescriptor.RouteValues"/> /// when the action descriptor is created, but will not be visible in <see cref="RouteValues"/>. /// </para> /// </remarks> public IDictionary<string, string> RouteValues { get; } /// <summary> /// Gets or sets an <see cref="IOutboundParameterTransformer"/> that will be used to transform /// built-in route parameters such as <c>action</c>, <c>controller</c>, and <c>area</c> as well as /// additional parameters specified by <see cref="RouteValues"/> into static segments in the route template. /// </summary> /// <remarks> /// <para> /// This feature only applies when using endpoint routing. /// </para> /// </remarks> public IOutboundParameterTransformer? RouteParameterTransformer { get; set; } }