| File: PageActionDescriptor.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.Diagnostics; using Microsoft.AspNetCore.Mvc.Abstractions; namespace Microsoft.AspNetCore.Mvc.RazorPages; /// <summary> /// Describes a page action. /// </summary> [DebuggerDisplay("{DebuggerDisplayString,nq}")] public class PageActionDescriptor : ActionDescriptor { /// <summary> /// Initializes a new instance of <see cref="PageActionDescriptor"/>. /// </summary> public PageActionDescriptor() { } /// <summary> /// A copy constructor for <see cref="PageActionDescriptor"/>. /// </summary> /// <param name="other">The <see cref="PageActionDescriptor"/> to copy from.</param> public PageActionDescriptor(PageActionDescriptor other) { ArgumentNullException.ThrowIfNull(other); RelativePath = other.RelativePath; ViewEnginePath = other.ViewEnginePath; AreaName = other.AreaName; } /// <summary> /// Gets or sets the application root relative path for the page. /// </summary> public string RelativePath { get; set; } = default!; /// <summary> /// Gets or sets 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; set; } = default!; /// <summary> /// Gets or sets the area name for this page. /// This value will be <c>null</c> for non-area pages. /// </summary> public string? AreaName { get; set; } internal virtual CompiledPageActionDescriptor? CompiledPageDescriptor { get; set; } // This is a cache to avoid multiple compilation operations kicking off internal Task<CompiledPageActionDescriptor>? CompiledPageActionDescriptorTask { get; set; } /// <inheritdoc /> public override string? DisplayName { get { if (base.DisplayName == null && ViewEnginePath != null) { base.DisplayName = ViewEnginePath; } return base.DisplayName; } set { ArgumentNullException.ThrowIfNull(value); base.DisplayName = value; } } private string DebuggerDisplayString => $"{nameof(ViewEnginePath)} = {ViewEnginePath}, {nameof(RelativePath)} = {RelativePath}"; }