Razor Konwencje dotyczące tras i aplikacji na stronach ASP.NET CoreRazor Pages route and app conventions in ASP.NET Core

Dowiedz się, w jaki sposób używać konwencji dotyczących trasy strony i dostawcy modelu aplikacji do kontrolowania routingu, odnajdywania i przetwarzania stron w Razor aplikacjach.Learn how to use page route and app model provider conventions to control page routing, discovery, and processing in Razor Pages apps.

Jeśli trzeba skonfigurować niestandardowe trasy stron dla poszczególnych stron, skonfiguruj Routing do stron z Konwencją AddPageRoute opisanej w dalszej części tego tematu.When you need to configure custom page routes for individual pages, configure routing to pages with the AddPageRoute convention described later in this topic.

Aby określić trasę strony, dodać segmenty tras lub dodać parametry do trasy, użyj @page dyrektywy strony.To specify a page route, add route segments, or add parameters to a route, use the page's @page directive. Aby uzyskać więcej informacji, zobacz niestandardowe trasy.For more information, see Custom routes.

Istnieją słowa zastrzeżone, których nie można używać jako segmentów tras ani nazw parametrów.There are reserved words that can't be used as route segments or parameter names. Aby uzyskać więcej informacji, zobacz Routing: zastrzeżone nazwy routingu.For more information, see Routing: Reserved routing names.

Wyświetl lub pobierz przykładowy kod (jak pobrać)View or download sample code (how to download)

ScenariuszScenario Przykład ilustruje...The sample demonstrates ...
Konwencje modeluModel conventions

Konwencje. AddConventions.Add
  • IPageRouteModelConventionIPageRouteModelConvention
  • IPageApplicationModelConventionIPageApplicationModelConvention
  • IPageHandlerModelConventionIPageHandlerModelConvention
Dodaj szablon trasy i nagłówek do stron aplikacji.Add a route template and header to an app's pages.
Konwencje akcji trasy stronyPage route action conventions
  • AddFolderRouteModelConventionAddFolderRouteModelConvention
  • AddPageRouteModelConventionAddPageRouteModelConvention
  • AddPageRouteAddPageRoute
Dodaj szablon trasy do stron w folderze i do pojedynczej strony.Add a route template to pages in a folder and to a single page.
Konwencje akcji modelu stronyPage model action conventions
  • AddFolderApplicationModelConventionAddFolderApplicationModelConvention
  • AddPageApplicationModelConventionAddPageApplicationModelConvention
  • ConfigureFilter (Klasa filtru, wyrażenie lambda lub fabryka filtrów)ConfigureFilter (filter class, lambda expression, or filter factory)
Dodaj nagłówek do stron w folderze, Dodaj nagłówek do jednej strony i skonfiguruj fabrykę filtrów , aby dodać nagłówek do stron aplikacji.Add a header to pages in a folder, add a header to a single page, and configure a filter factory to add a header to an app's pages.

Razor Konwencje stron są konfigurowane przy użyciu AddRazorPages przeciążenia, które konfiguruje RazorPagesOptions w programie Startup.ConfigureServices .Razor Pages conventions are configured using an AddRazorPages overload that configures RazorPagesOptions in Startup.ConfigureServices. Poniższe przykłady Konwencji zostały omówione w dalszej części tego tematu:The following convention examples are explained later in this topic:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages(options =>
    {
        options.Conventions.Add( ... );
        options.Conventions.AddFolderRouteModelConvention(
            "/OtherPages", model => { ... });
        options.Conventions.AddPageRouteModelConvention(
            "/About", model => { ... });
        options.Conventions.AddPageRoute(
            "/Contact", "TheContactPage/{text?}");
        options.Conventions.AddFolderApplicationModelConvention(
            "/OtherPages", model => { ... });
        options.Conventions.AddPageApplicationModelConvention(
            "/About", model => { ... });
        options.Conventions.ConfigureFilter(model => { ... });
        options.Conventions.ConfigureFilter( ... );
    });
}

Kolejność trasRoute order

Trasy określają Order do przetwarzania (dopasowanie trasy).Routes specify an Order for processing (route matching).

ZamówienieOrder ZachowanieBehavior
-1-1 Trasa jest przetwarzana przed przetworzeniem innych tras.The route is processed before other routes are processed.
00 Nie określono kolejności (wartość domyślna).Order isn't specified (default value). Przypisanie Order ( Order = null ) domyślnie trasy Order do 0 (zero) do przetworzenia.Not assigning Order (Order = null) defaults the route Order to 0 (zero) for processing.
1, 2, … n1, 2, … n Określa kolejność przetwarzania trasy.Specifies the route processing order.

Przetwarzanie trasy zostało ustanowione według Konwencji:Route processing is established by convention:

  • Trasy są przetwarzane w kolejności sekwencyjnej (-1, 0, 1, 2, … n).Routes are processed in sequential order (-1, 0, 1, 2, … n).
  • Gdy trasy są takie same Order , najpierw pasuje do najbardziej określonej trasy, a następnie mniej konkretnych tras.When routes have the same Order, the most specific route is matched first followed by less specific routes.
  • Gdy trasy o tej samej Order i tej samej liczbie parametrów pasują do adresu URL żądania, trasy są przetwarzane w kolejności, w jakiej są dodawane do PageConventionCollection .When routes with the same Order and the same number of parameters match a request URL, routes are processed in the order that they're added to the PageConventionCollection.

Jeśli to możliwe, unikaj w zależności od ustalonej kolejności przetwarzania trasy.If possible, avoid depending on an established route processing order. Ogólnie rzecz biorąc, routing wybiera prawidłową trasę z dopasowywaniem adresów URL.Generally, routing selects the correct route with URL matching. Jeśli musisz ustawić właściwości trasy Order , aby poprawnie kierować żądania, schemat routingu aplikacji jest prawdopodobnie mylący dla klientów i jest nierozsądny do utrzymania.If you must set route Order properties to route requests correctly, the app's routing scheme is probably confusing to clients and fragile to maintain. Postaraj się, aby uprościć schemat routingu aplikacji.Seek to simplify the app's routing scheme. Przykładowa aplikacja wymaga jawnej kolejności przetwarzania trasy, aby przedstawić kilka scenariuszy routingu przy użyciu jednej aplikacji.The sample app requires an explicit route processing order to demonstrate several routing scenarios using a single app. Należy jednak podjąć próbę uniknięcia praktycznego ustawienia trasy Order w aplikacjach produkcyjnych.However, you should attempt to avoid the practice of setting route Order in production apps.

Razor Strony routingu i routingu kontrolera MVC współdzielą implementację.Razor Pages routing and MVC controller routing share an implementation. Informacje o zamówieniu trasy w tematach MVC są dostępne w obszarze routing do akcji kontrolera: porządkowanie tras atrybutów.Information on route order in the MVC topics is available at Routing to controller actions: Ordering attribute routes.

Konwencje modeluModel conventions

Dodaj delegata IPageConvention , aby dodać konwencje modelu , które mają zastosowanie do Razor stron.Add a delegate for IPageConvention to add model conventions that apply to Razor Pages.

Dodawanie Konwencji modelu trasy do wszystkich stronAdd a route model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageRouteModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu trasy strony.Use Conventions to create and add an IPageRouteModelConvention to the collection of IPageConvention instances that are applied during page route model construction.

Przykładowa aplikacja dodaje {globalTemplate?} szablon trasy do wszystkich stron w aplikacji:The sample app adds a {globalTemplate?} route template to all of the pages in the app:

public class GlobalTemplatePageRouteModelConvention 
    : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        var selectorCount = model.Selectors.Count;
        for (var i = 0; i < selectorCount; i++)
        {
            var selector = model.Selectors[i];
            model.Selectors.Add(new SelectorModel
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Order = 1,
                    Template = AttributeRouteModel.CombineTemplates(
                        selector.AttributeRouteModel.Template, 
                        "{globalTemplate?}"),
                }
            });
        }
    }
}

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 1 .The Order property for the AttributeRouteModel is set to 1. Zapewnia to zachowanie dopasowania trasy w przykładowej aplikacji:This ensures the following route matching behavior in the sample app:

  • Szablon trasy dla programu TheContactPage/{text?} został dodany w dalszej części tematu.A route template for TheContactPage/{text?} is added later in the topic. Trasa strony kontaktowej ma domyślną kolejność null ( Order = 0 ), więc pasuje przed {globalTemplate?} szablonem trasy.The Contact Page route has a default order of null (Order = 0), so it matches before the {globalTemplate?} route template.
  • {aboutTemplate?}Szablon trasy zostanie dodany w dalszej części tematu.An {aboutTemplate?} route template is added later in the topic. {aboutTemplate?}Szablon ma Order 2 .The {aboutTemplate?} template is given an Order of 2. Gdy strona informacje jest wymagana w lokalizacji /About/RouteDataValue , "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["aboutTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.When the About page is requested at /About/RouteDataValue, "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["aboutTemplate"] (Order = 2) due to setting the Order property.
  • {otherPagesTemplate?}Szablon trasy zostanie dodany w dalszej części tematu.An {otherPagesTemplate?} route template is added later in the topic. {otherPagesTemplate?}Szablon ma Order 2 .The {otherPagesTemplate?} template is given an Order of 2. Gdy zażądano dowolnej strony w folderze Pages/OtherPages z parametrem trasy (na przykład /OtherPages/Page1/RouteDataValue ), "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["otherPagesTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.When any page in the Pages/OtherPages folder is requested with a route parameter (for example, /OtherPages/Page1/RouteDataValue), "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["otherPagesTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Razor Opcje stron, takie jak dodawanie Conventions , są dodawane po Razor dodaniu stron do kolekcji usług w programie Startup.ConfigureServices .Razor Pages options, such as adding Conventions, are added when Razor Pages is added to the service collection in Startup.ConfigureServices. Aby zapoznać się z przykładem, zobacz przykładową aplikację.For an example, see the sample app.

options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());

Zażądaj przykładowej strony o podanej godzinie localhost:5000/About/GlobalRouteValue i sprawdź wynik:Request the sample's About page at localhost:5000/About/GlobalRouteValue and inspect the result:

Strona informacje jest wymagana z segmentem trasy GlobalRouteValue.

Dodawanie Konwencji modelu aplikacji do wszystkich stronAdd an app model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageApplicationModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu aplikacji na stronie.Use Conventions to create and add an IPageApplicationModelConvention to the collection of IPageConvention instances that are applied during page app model construction.

Aby przedstawić te i inne konwencje w dalszej części tematu, przykładowa aplikacja zawiera AddHeaderAttribute klasę.To demonstrate this and other conventions later in the topic, the sample app includes an AddHeaderAttribute class. Konstruktor klasy akceptuje name ciąg i values tablicę ciągów.The class constructor accepts a name string and a values string array. Te wartości są używane w OnResultExecuting metodzie do ustawiania nagłówka odpowiedzi.These values are used in its OnResultExecuting method to set a response header. Pełna Klasa jest wyświetlana w sekcji konwencje akcji modelu strony w dalszej części tematu.The full class is shown in the Page model action conventions section later in the topic.

Przykładowa aplikacja używa AddHeaderAttribute klasy do dodawania nagłówka, GlobalHeader do wszystkich stron w aplikacji:The sample app uses the AddHeaderAttribute class to add a header, GlobalHeader, to all of the pages in the app:

public class GlobalHeaderPageApplicationModelConvention 
    : IPageApplicationModelConvention
{
    public void Apply(PageApplicationModel model)
    {
        model.Filters.Add(new AddHeaderAttribute(
            "GlobalHeader", new string[] { "Global Header Value" }));
    }
}

Startup.cs :Startup.cs :

options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że GlobalHeader został dodany.

Dodawanie Konwencji modelu programu obsługi do wszystkich stronAdd a handler model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageHandlerModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu obsługi stron.Use Conventions to create and add an IPageHandlerModelConvention to the collection of IPageConvention instances that are applied during page handler model construction.

public class GlobalPageHandlerModelConvention
    : IPageHandlerModelConvention
{
    public void Apply(PageHandlerModel model)
    {
        // Access the PageHandlerModel
    }
}

Startup.cs :Startup.cs :

options.Conventions.Add(new GlobalPageHandlerModelConvention());

Konwencje akcji trasy stronyPage route action conventions

Domyślny dostawca modelu trasy, który pochodzi od IPageRouteModelProvider Konwencji Invoke, zaprojektowanych w celu zapewnienia punktów rozszerzalności do konfigurowania tras strony.The default route model provider that derives from IPageRouteModelProvider invokes conventions which are designed to provide extensibility points for configuring page routes.

Konwencja modelu trasy folderuFolder route model convention

Służy AddFolderRouteModelConvention do tworzenia i dodawania IPageRouteModelConvention , który wywołuje akcję na PageRouteModel wszystkich stronach w określonym folderze.Use AddFolderRouteModelConvention to create and add an IPageRouteModelConvention that invokes an action on the PageRouteModel for all of the pages under the specified folder.

Aplikacja Przykładowa używa AddFolderRouteModelConvention do dodawania {otherPagesTemplate?} szablonu trasy do stron w folderze OtherPages :The sample app uses AddFolderRouteModelConvention to add an {otherPagesTemplate?} route template to the pages in the OtherPages folder:

options.Conventions.AddFolderRouteModelConvention("/OtherPages", model =>
{
    var selectorCount = model.Selectors.Count;
    for (var i = 0; i < selectorCount; i++)
    {
        var selector = model.Selectors[i];
        model.Selectors.Add(new SelectorModel
        {
            AttributeRouteModel = new AttributeRouteModel
            {
                Order = 2,
                Template = AttributeRouteModel.CombineTemplates(
                    selector.AttributeRouteModel.Template, 
                    "{otherPagesTemplate?}"),
            }
        });
    }
});

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 2 .The Order property for the AttributeRouteModel is set to 2. Dzięki temu szablon dla {globalTemplate?} (ustawione wcześniej w temacie do 1 ) ma priorytet dla pierwszej pozycji wartości danych trasy, gdy podano wartość pojedynczej trasy.This ensures that the template for {globalTemplate?} (set earlier in the topic to 1) is given priority for the first route data value position when a single route value is provided. Jeśli zażądano strony w folderze Pages/OtherPages z wartością parametru trasy (na przykład /OtherPages/Page1/RouteDataValue ), "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] (), Order = 1 a nie RouteData.Values["otherPagesTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.If a page in the Pages/OtherPages folder is requested with a route parameter value (for example, /OtherPages/Page1/RouteDataValue), "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["otherPagesTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Zażądaj strony z przykładową stroną localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue i sprawdź wynik:Request the sample's Page1 page at localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue and inspect the result:

Żądanie Strona1 w folderze OtherPages z segmentem trasy GlobalRouteValue i OtherPagesRouteValue.

Konwencja modelu trasy stronyPage route model convention

Służy AddPageRouteModelConvention do tworzenia i dodawania IPageRouteModelConvention , który wywołuje akcję na PageRouteModel stronie dla strony o określonej nazwie.Use AddPageRouteModelConvention to create and add an IPageRouteModelConvention that invokes an action on the PageRouteModel for the page with the specified name.

Aplikacja Przykładowa używa AddPageRouteModelConvention do dodawania {aboutTemplate?} szablonu trasy do strony informacje:The sample app uses AddPageRouteModelConvention to add an {aboutTemplate?} route template to the About page:

options.Conventions.AddPageRouteModelConvention("/About", model =>
{
    var selectorCount = model.Selectors.Count;
    for (var i = 0; i < selectorCount; i++)
    {
        var selector = model.Selectors[i];
        model.Selectors.Add(new SelectorModel
        {
            AttributeRouteModel = new AttributeRouteModel
            {
                Order = 2,
                Template = AttributeRouteModel.CombineTemplates(
                    selector.AttributeRouteModel.Template, 
                    "{aboutTemplate?}"),
            }
        });
    }
});

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 2 .The Order property for the AttributeRouteModel is set to 2. Dzięki temu szablon dla {globalTemplate?} (ustawione wcześniej w temacie do 1 ) ma priorytet dla pierwszej pozycji wartości danych trasy, gdy podano wartość pojedynczej trasy.This ensures that the template for {globalTemplate?} (set earlier in the topic to 1) is given priority for the first route data value position when a single route value is provided. Jeśli zażądano strony o wartości parametru trasy w lokalizacji /About/RouteDataValue , "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["aboutTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.If the About page is requested with a route parameter value at /About/RouteDataValue, "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["aboutTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Zażądaj przykładowej strony o podanej godzinie localhost:5000/About/GlobalRouteValue/AboutRouteValue i sprawdź wynik:Request the sample's About page at localhost:5000/About/GlobalRouteValue/AboutRouteValue and inspect the result:

Żądanie strony about z segmentami trasy dla GlobalRouteValue i AboutRouteValue.

Dostosowywanie tras stron przy użyciu transformatora parametrówUse a parameter transformer to customize page routes

Trasy stron generowane przez ASP.NET Core mogą być dostosowywane przy użyciu transformatora parametrów.Page routes generated by ASP.NET Core can be customized using a parameter transformer. Transformator parametrów implementuje IOutboundParameterTransformer i przekształca wartość parametrów.A parameter transformer implements IOutboundParameterTransformer and transforms the value of parameters. Na przykład niestandardowy SlugifyParameterTransformer transformator parametrów zmienia SubscriptionManagement wartość trasy na subscription-management .For example, a custom SlugifyParameterTransformer parameter transformer changes the SubscriptionManagement route value to subscription-management.

PageRouteTransformerConventionKonwencja model trasy strony stosuje transformator parametrów do segmentów nazw folderów i plików w przypadku automatycznie generowanych tras stron w aplikacji.The PageRouteTransformerConvention page route model convention applies a parameter transformer to the folder and file name segments of automatically generated page routes in an app. Na przykład Razor plik Pages w lokalizacji /Pages/SubscriptionManagement/ViewAll.cshtml będzie mógł zostać ponownie zapisany w /SubscriptionManagement/ViewAll usłudze do /subscription-management/view-all .For example, the Razor Pages file at /Pages/SubscriptionManagement/ViewAll.cshtml would have its route rewritten from /SubscriptionManagement/ViewAll to /subscription-management/view-all.

PageRouteTransformerConvention przekształca automatycznie generowane segmenty trasy strony, która pochodzi z Razor folderu stron i nazwy pliku.PageRouteTransformerConvention only transforms the automatically generated segments of a page route that come from the Razor Pages folder and file name. Nie przekształca segmentów tras dodanych do @page dyrektywy.It doesn't transform route segments added with the @page directive. Konwencja nie przetwarza również tras dodanych przez AddPageRoute .The convention also doesn't transform routes added by AddPageRoute.

PageRouteTransformerConventionZarejestrowano jako opcję w Startup.ConfigureServices :The PageRouteTransformerConvention is registered as an option in Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages(options =>
    {
        options.Conventions.Add(
            new PageRouteTransformerConvention(
                new SlugifyParameterTransformer()));
    });
}
public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object value)
    {
        if (value == null) { return null; }

        return Regex.Replace(value.ToString(),
                             "([a-z])([A-Z])",
                             "$1-$2",
                             RegexOptions.CultureInvariant,
                             TimeSpan.FromMilliseconds(100)).ToLowerInvariant();
    }
}

Ostrzeżenie

Podczas używania System.Text.RegularExpressions do przetwarzania niezaufanych danych wejściowych należy przekazać limit czasu.When using System.Text.RegularExpressions to process untrusted input, pass a timeout. Złośliwy użytkownik może podać dane wejściowe RegularExpressions , aby spowodować atak typu "odmowa usługi".A malicious user can provide input to RegularExpressions causing a Denial-of-Service attack. Interfejsy API środowiska ASP.NET Core Framework RegularExpressions , które używają przekazywania limitu czasu.ASP.NET Core framework APIs that use RegularExpressions pass a timeout.

Konfigurowanie trasy stronyConfigure a page route

Służy AddPageRoute do konfigurowania trasy do strony pod określoną ścieżką strony.Use AddPageRoute to configure a route to a page at the specified page path. Wygenerowane linki do strony używają określonej trasy.Generated links to the page use your specified route. AddPageRoute używa AddPageRouteModelConvention do ustanowienia trasy.AddPageRoute uses AddPageRouteModelConvention to establish the route.

Przykładowa aplikacja tworzy trasę do /TheContactPage Contact. cshtml :The sample app creates a route to /TheContactPage for Contact.cshtml :

options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");

Na stronie kontakt można również uzyskać dostęp do tej strony przy /Contact użyciu trasy domyślnej.The Contact page can also be reached at /Contact via its default route.

Niestandardowa trasa aplikacji przykładowej do strony kontaktowej umożliwia określenie opcjonalnego text segmentu trasy ( {text?} ).The sample app's custom route to the Contact page allows for an optional text route segment ({text?}). Strona zawiera również ten opcjonalny segment w swojej @page dyrektywie w przypadku, gdy osoba odwiedzająca uzyskuje dostęp do strony w swojej /Contact trasie:The page also includes this optional segment in its @page directive in case the visitor accesses the page at its /Contact route:

@page "{text?}"
@model ContactModel
@{
    ViewData["Title"] = "Contact";
}

<h1>@ViewData["Title"]</h1>
<h2>@Model.Message</h2>

<address>
    One Microsoft Way<br>
    Redmond, WA 98052-6399<br>
    <abbr title="Phone">P:</abbr>
    425.555.0100
</address>

<address>
    <strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br>
    <strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
</address>

<p>@Model.RouteDataTextTemplateValue</p>

Należy pamiętać, że adres URL wygenerowany dla linku kontaktowego na renderowanej stronie odzwierciedla zaktualizowaną trasę:Note that the URL generated for the Contact link in the rendered page reflects the updated route:

Link do kontaktu z przykładową aplikacją na pasku nawigacyjnym

Sprawdzanie linku kontaktu w renderowanym kodzie HTML wskazuje, że odwołanie href jest ustawione na wartość "/TheContactPage"

Odwiedź stronę kontaktową na swojej zwykłej trasie /Contact lub w niestandardowej trasie /TheContactPage .Visit the Contact page at either its ordinary route, /Contact, or the custom route, /TheContactPage. W przypadku podania dodatkowego text segmentu trasy na stronie jest wyświetlany segment zakodowany w formacie HTML, który jest dostarczany:If you supply an additional text route segment, the page shows the HTML-encoded segment that you provide:

Przykładowa przeglądarka brzegowa dostarczająca opcjonalny segment trasy "text" elementu "TextValue" w adresie URL.

Konwencje akcji modelu stronyPage model action conventions

Domyślny dostawca modelu strony, który implementuje IPageApplicationModelProvider konwencje wywołujące, zaprojektowane w celu zapewnienia punktów rozszerzalności do konfigurowania modeli stron.The default page model provider that implements IPageApplicationModelProvider invokes conventions which are designed to provide extensibility points for configuring page models. Konwencje te są przydatne podczas kompilowania i modyfikowania scenariuszy przetwarzania i odnajdywania stron.These conventions are useful when building and modifying page discovery and processing scenarios.

W przykładach w tej sekcji Przykładowa aplikacja używa AddHeaderAttribute klasy, która jest ResultFilterAttribute , która ma zastosowanie do nagłówka odpowiedzi:For the examples in this section, the sample app uses an AddHeaderAttribute class, which is a ResultFilterAttribute, that applies a response header:

public class AddHeaderAttribute : ResultFilterAttribute
{
    private readonly string _name;
    private readonly string[] _values;

    public AddHeaderAttribute(string name, string[] values)
    {
        _name = name;
        _values = values;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        context.HttpContext.Response.Headers.Add(_name, _values);
        base.OnResultExecuting(context);
    }
}

Przy użyciu konwencji, przykład pokazuje, jak zastosować atrybut do wszystkich stron w folderze i do pojedynczej strony.Using conventions, the sample demonstrates how to apply the attribute to all of the pages in a folder and to a single page.

Konwencja modelu aplikacji folderuFolder app model convention

Służy AddFolderApplicationModelConvention do tworzenia i dodawania IPageApplicationModelConvention , który wywołuje akcję w PageApplicationModel wystąpieniach dla wszystkich stron w określonym folderze.Use AddFolderApplicationModelConvention to create and add an IPageApplicationModelConvention that invokes an action on PageApplicationModel instances for all pages under the specified folder.

Przykład ilustruje użycie AddFolderApplicationModelConvention przez dodanie nagłówka, OtherPagesHeader do stron w folderze OtherPages aplikacji:The sample demonstrates the use of AddFolderApplicationModelConvention by adding a header, OtherPagesHeader, to the pages inside the OtherPages folder of the app:

options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
    model.Filters.Add(new AddHeaderAttribute(
        "OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});

Zażądaj przykładowej strony localhost:5000/OtherPages/Page1 i zbadaj nagłówki, aby wyświetlić wyniki:Request the sample's Page1 page at localhost:5000/OtherPages/Page1 and inspect the headers to view the result:

Nagłówki odpowiedzi strony OtherPages/Strona1 pokazują, że OtherPagesHeader został dodany.

Konwencja modelu aplikacji stronyPage app model convention

Służy AddPageApplicationModelConvention do tworzenia i dodawania IPageApplicationModelConvention , który wywołuje akcję na PageApplicationModel stronie dla strony o określonej nazwie.Use AddPageApplicationModelConvention to create and add an IPageApplicationModelConvention that invokes an action on the PageApplicationModel for the page with the specified name.

Przykład ilustruje użycie AddPageApplicationModelConvention przez dodanie nagłówka, AboutHeader do strony informacje:The sample demonstrates the use of AddPageApplicationModelConvention by adding a header, AboutHeader, to the About page:

options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
    model.Filters.Add(new AddHeaderAttribute(
        "AboutHeader", new string[] { "About Header Value" }));
});

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że AboutHeader został dodany.

Konfigurowanie filtruConfigure a filter

ConfigureFilter konfiguruje określony filtr, który ma zostać zastosowany.ConfigureFilter configures the specified filter to apply. Można zaimplementować klasę filtru, ale Przykładowa aplikacja pokazuje, jak zaimplementować filtr w wyrażeniu lambda, które jest zaimplementowane w tle jako fabryka, która zwraca filtr:You can implement a filter class, but the sample app shows how to implement a filter in a lambda expression, which is implemented behind-the-scenes as a factory that returns a filter:

options.Conventions.ConfigureFilter(model =>
{
    if (model.RelativePath.Contains("OtherPages/Page2"))
    {
        return new AddHeaderAttribute(
            "OtherPagesPage2Header", 
            new string[] { "OtherPages/Page2 Header Value" });
    }
    return new EmptyFilter();
});

Model aplikacji strony służy do sprawdzania ścieżki względnej dla segmentów, które prowadzą do strony PAGE2 w folderze OtherPages .The page app model is used to check the relative path for segments that lead to the Page2 page in the OtherPages folder. Jeśli warunek zostanie spełniony, zostanie dodany nagłówek.If the condition passes, a header is added. Jeśli nie, EmptyFilter jest stosowane.If not, the EmptyFilter is applied.

EmptyFilter jest filtrem akcji.EmptyFilter is an Action filter. Ze względu na to, że filtry akcji są ignorowane przez Razor strony, nie EmptyFilter ma ona wpływu na zamierzone, jeśli ścieżka nie zawiera OtherPages/Page2 .Since Action filters are ignored by Razor Pages, the EmptyFilter has no effect as intended if the path doesn't contain OtherPages/Page2.

Zażądaj strony PAGE2 próbki na localhost:5000/OtherPages/Page2 i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's Page2 page at localhost:5000/OtherPages/Page2 and inspect the headers to view the result:

OtherPagesPage2Header jest dodawany do odpowiedzi dla PAGE2.

Konfigurowanie fabryki filtrówConfigure a filter factory

ConfigureFilter konfiguruje określoną fabrykę do zastosowania filtrów do wszystkich Razor stron.ConfigureFilter configures the specified factory to apply filters to all Razor Pages.

Przykładowa aplikacja zawiera przykładowe użycie fabryki filtrów przez dodanie nagłówka, FilterFactoryHeader z dwoma wartościami do stron aplikacji:The sample app provides an example of using a filter factory by adding a header, FilterFactoryHeader, with two values to the app's pages:

options.Conventions.ConfigureFilter(new AddHeaderWithFactory());

AddHeaderWithFactory.cs :AddHeaderWithFactory.cs :

public class AddHeaderWithFactory : IFilterFactory
{
    // Implement IFilterFactory
    public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
    {
        return new AddHeaderFilter();
    }

    private class AddHeaderFilter : IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            context.HttpContext.Response.Headers.Add(
                "FilterFactoryHeader", 
                new string[] 
                { 
                    "Filter Factory Header Value 1",
                    "Filter Factory Header Value 2"
                });
        }

        public void OnResultExecuted(ResultExecutedContext context)
        {
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że dodano dwa nagłówki FilterFactoryHeader.

Filtry MVC i filtr strony (IPageFilter)MVC Filters and the Page filter (IPageFilter)

Filtry akcji MVC są ignorowane przez Razor strony, ponieważ Razor strony używają metod obsługi.MVC Action filters are ignored by Razor Pages, since Razor Pages use handler methods. Dostępne są inne typy filtrów MVC: autoryzacja, wyjątek, zasóbi wynik.Other types of MVC filters are available for you to use: Authorization, Exception, Resource, and Result. Aby uzyskać więcej informacji, zobacz temat filtry .For more information, see the Filters topic.

Filtr strony ( IPageFilter ) to filtr, który ma zastosowanie do Razor stron.The Page filter (IPageFilter) is a filter that applies to Razor Pages. Aby uzyskać więcej informacji, zobacz metody filtrowania dla Razor stron.For more information, see Filter methods for Razor Pages.

Dodatkowe zasobyAdditional resources

Dowiedz się, w jaki sposób używać konwencji dotyczących trasy strony i dostawcy modelu aplikacji do kontrolowania routingu, odnajdywania i przetwarzania stron w Razor aplikacjach.Learn how to use page route and app model provider conventions to control page routing, discovery, and processing in Razor Pages apps.

Jeśli trzeba skonfigurować niestandardowe trasy stron dla poszczególnych stron, skonfiguruj Routing do stron z Konwencją AddPageRoute opisanej w dalszej części tego tematu.When you need to configure custom page routes for individual pages, configure routing to pages with the AddPageRoute convention described later in this topic.

Aby określić trasę strony, dodać segmenty tras lub dodać parametry do trasy, użyj @page dyrektywy strony.To specify a page route, add route segments, or add parameters to a route, use the page's @page directive. Aby uzyskać więcej informacji, zobacz niestandardowe trasy.For more information, see Custom routes.

Istnieją słowa zastrzeżone, których nie można używać jako segmentów tras ani nazw parametrów.There are reserved words that can't be used as route segments or parameter names. Aby uzyskać więcej informacji, zobacz Routing: zastrzeżone nazwy routingu.For more information, see Routing: Reserved routing names.

Wyświetl lub pobierz przykładowy kod (jak pobrać)View or download sample code (how to download)

ScenariuszScenario Przykład ilustruje...The sample demonstrates ...
Konwencje modeluModel conventions

Konwencje. AddConventions.Add
  • IPageRouteModelConventionIPageRouteModelConvention
  • IPageApplicationModelConventionIPageApplicationModelConvention
  • IPageHandlerModelConventionIPageHandlerModelConvention
Dodaj szablon trasy i nagłówek do stron aplikacji.Add a route template and header to an app's pages.
Konwencje akcji trasy stronyPage route action conventions
  • AddFolderRouteModelConventionAddFolderRouteModelConvention
  • AddPageRouteModelConventionAddPageRouteModelConvention
  • AddPageRouteAddPageRoute
Dodaj szablon trasy do stron w folderze i do pojedynczej strony.Add a route template to pages in a folder and to a single page.
Konwencje akcji modelu stronyPage model action conventions
  • AddFolderApplicationModelConventionAddFolderApplicationModelConvention
  • AddPageApplicationModelConventionAddPageApplicationModelConvention
  • ConfigureFilter (Klasa filtru, wyrażenie lambda lub fabryka filtrów)ConfigureFilter (filter class, lambda expression, or filter factory)
Dodaj nagłówek do stron w folderze, Dodaj nagłówek do jednej strony i skonfiguruj fabrykę filtrów , aby dodać nagłówek do stron aplikacji.Add a header to pages in a folder, add a header to a single page, and configure a filter factory to add a header to an app's pages.

Razor Konwencje stron są dodawane i konfigurowane przy użyciu AddRazorPagesOptions metody rozszerzenia do AddMvc kolekcji usług w Startup klasie.Razor Pages conventions are added and configured using the AddRazorPagesOptions extension method to AddMvc on the service collection in the Startup class. Poniższe przykłady Konwencji zostały omówione w dalszej części tego tematu:The following convention examples are explained later in this topic:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.Add( ... );
            options.Conventions.AddFolderRouteModelConvention(
                "/OtherPages", model => { ... });
            options.Conventions.AddPageRouteModelConvention(
                "/About", model => { ... });
            options.Conventions.AddPageRoute(
                "/Contact", "TheContactPage/{text?}");
            options.Conventions.AddFolderApplicationModelConvention(
                "/OtherPages", model => { ... });
            options.Conventions.AddPageApplicationModelConvention(
                "/About", model => { ... });
            options.Conventions.ConfigureFilter(model => { ... });
            options.Conventions.ConfigureFilter( ... );
        });
}

Kolejność trasRoute order

Trasy określają Order do przetwarzania (dopasowanie trasy).Routes specify an Order for processing (route matching).

ZamówienieOrder ZachowanieBehavior
-1-1 Trasa jest przetwarzana przed przetworzeniem innych tras.The route is processed before other routes are processed.
00 Nie określono kolejności (wartość domyślna).Order isn't specified (default value). Przypisanie Order ( Order = null ) domyślnie trasy Order do 0 (zero) do przetworzenia.Not assigning Order (Order = null) defaults the route Order to 0 (zero) for processing.
1, 2, … n1, 2, … n Określa kolejność przetwarzania trasy.Specifies the route processing order.

Przetwarzanie trasy zostało ustanowione według Konwencji:Route processing is established by convention:

  • Trasy są przetwarzane w kolejności sekwencyjnej (-1, 0, 1, 2, … n).Routes are processed in sequential order (-1, 0, 1, 2, … n).
  • Gdy trasy są takie same Order , najpierw pasuje do najbardziej określonej trasy, a następnie mniej konkretnych tras.When routes have the same Order, the most specific route is matched first followed by less specific routes.
  • Gdy trasy o tej samej Order i tej samej liczbie parametrów pasują do adresu URL żądania, trasy są przetwarzane w kolejności, w jakiej są dodawane do PageConventionCollection .When routes with the same Order and the same number of parameters match a request URL, routes are processed in the order that they're added to the PageConventionCollection.

Jeśli to możliwe, unikaj w zależności od ustalonej kolejności przetwarzania trasy.If possible, avoid depending on an established route processing order. Ogólnie rzecz biorąc, routing wybiera prawidłową trasę z dopasowywaniem adresów URL.Generally, routing selects the correct route with URL matching. Jeśli musisz ustawić właściwości trasy Order , aby poprawnie kierować żądania, schemat routingu aplikacji jest prawdopodobnie mylący dla klientów i jest nierozsądny do utrzymania.If you must set route Order properties to route requests correctly, the app's routing scheme is probably confusing to clients and fragile to maintain. Postaraj się, aby uprościć schemat routingu aplikacji.Seek to simplify the app's routing scheme. Przykładowa aplikacja wymaga jawnej kolejności przetwarzania trasy, aby przedstawić kilka scenariuszy routingu przy użyciu jednej aplikacji.The sample app requires an explicit route processing order to demonstrate several routing scenarios using a single app. Należy jednak podjąć próbę uniknięcia praktycznego ustawienia trasy Order w aplikacjach produkcyjnych.However, you should attempt to avoid the practice of setting route Order in production apps.

Razor Strony routingu i routingu kontrolera MVC współdzielą implementację.Razor Pages routing and MVC controller routing share an implementation. Informacje o zamówieniu trasy w tematach MVC są dostępne w obszarze routing do akcji kontrolera: porządkowanie tras atrybutów.Information on route order in the MVC topics is available at Routing to controller actions: Ordering attribute routes.

Konwencje modeluModel conventions

Dodaj delegata IPageConvention , aby dodać konwencje modelu , które mają zastosowanie do Razor stron.Add a delegate for IPageConvention to add model conventions that apply to Razor Pages.

Dodawanie Konwencji modelu trasy do wszystkich stronAdd a route model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageRouteModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu trasy strony.Use Conventions to create and add an IPageRouteModelConvention to the collection of IPageConvention instances that are applied during page route model construction.

Przykładowa aplikacja dodaje {globalTemplate?} szablon trasy do wszystkich stron w aplikacji:The sample app adds a {globalTemplate?} route template to all of the pages in the app:

public class GlobalTemplatePageRouteModelConvention 
    : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        var selectorCount = model.Selectors.Count;
        for (var i = 0; i < selectorCount; i++)
        {
            var selector = model.Selectors[i];
            model.Selectors.Add(new SelectorModel
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Order = 1,
                    Template = AttributeRouteModel.CombineTemplates(
                        selector.AttributeRouteModel.Template, 
                        "{globalTemplate?}"),
                }
            });
        }
    }
}

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 1 .The Order property for the AttributeRouteModel is set to 1. Zapewnia to zachowanie dopasowania trasy w przykładowej aplikacji:This ensures the following route matching behavior in the sample app:

  • Szablon trasy dla programu TheContactPage/{text?} został dodany w dalszej części tematu.A route template for TheContactPage/{text?} is added later in the topic. Trasa strony kontaktowej ma domyślną kolejność null ( Order = 0 ), więc pasuje przed {globalTemplate?} szablonem trasy.The Contact Page route has a default order of null (Order = 0), so it matches before the {globalTemplate?} route template.
  • {aboutTemplate?}Szablon trasy zostanie dodany w dalszej części tematu.An {aboutTemplate?} route template is added later in the topic. {aboutTemplate?}Szablon ma Order 2 .The {aboutTemplate?} template is given an Order of 2. Gdy strona informacje jest wymagana w lokalizacji /About/RouteDataValue , "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["aboutTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.When the About page is requested at /About/RouteDataValue, "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["aboutTemplate"] (Order = 2) due to setting the Order property.
  • {otherPagesTemplate?}Szablon trasy zostanie dodany w dalszej części tematu.An {otherPagesTemplate?} route template is added later in the topic. {otherPagesTemplate?}Szablon ma Order 2 .The {otherPagesTemplate?} template is given an Order of 2. Gdy zażądano dowolnej strony w folderze Pages/OtherPages z parametrem trasy (na przykład /OtherPages/Page1/RouteDataValue ), "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["otherPagesTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.When any page in the Pages/OtherPages folder is requested with a route parameter (for example, /OtherPages/Page1/RouteDataValue), "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["otherPagesTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Razor Opcje stron, takie jak dodawanie Conventions , są dodawane po dodaniu MVC do kolekcji usług w programie Startup.ConfigureServices .Razor Pages options, such as adding Conventions, are added when MVC is added to the service collection in Startup.ConfigureServices. Aby zapoznać się z przykładem, zobacz przykładową aplikację.For an example, see the sample app.

options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());

Zażądaj przykładowej strony o podanej godzinie localhost:5000/About/GlobalRouteValue i sprawdź wynik:Request the sample's About page at localhost:5000/About/GlobalRouteValue and inspect the result:

Strona informacje jest wymagana z segmentem trasy GlobalRouteValue.

Dodawanie Konwencji modelu aplikacji do wszystkich stronAdd an app model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageApplicationModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu aplikacji na stronie.Use Conventions to create and add an IPageApplicationModelConvention to the collection of IPageConvention instances that are applied during page app model construction.

Aby przedstawić te i inne konwencje w dalszej części tematu, przykładowa aplikacja zawiera AddHeaderAttribute klasę.To demonstrate this and other conventions later in the topic, the sample app includes an AddHeaderAttribute class. Konstruktor klasy akceptuje name ciąg i values tablicę ciągów.The class constructor accepts a name string and a values string array. Te wartości są używane w OnResultExecuting metodzie do ustawiania nagłówka odpowiedzi.These values are used in its OnResultExecuting method to set a response header. Pełna Klasa jest wyświetlana w sekcji konwencje akcji modelu strony w dalszej części tematu.The full class is shown in the Page model action conventions section later in the topic.

Przykładowa aplikacja używa AddHeaderAttribute klasy do dodawania nagłówka, GlobalHeader do wszystkich stron w aplikacji:The sample app uses the AddHeaderAttribute class to add a header, GlobalHeader, to all of the pages in the app:

public class GlobalHeaderPageApplicationModelConvention 
    : IPageApplicationModelConvention
{
    public void Apply(PageApplicationModel model)
    {
        model.Filters.Add(new AddHeaderAttribute(
            "GlobalHeader", new string[] { "Global Header Value" }));
    }
}

Startup.cs :Startup.cs :

options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że GlobalHeader został dodany.

Dodawanie Konwencji modelu programu obsługi do wszystkich stronAdd a handler model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageHandlerModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu obsługi stron.Use Conventions to create and add an IPageHandlerModelConvention to the collection of IPageConvention instances that are applied during page handler model construction.

public class GlobalPageHandlerModelConvention
    : IPageHandlerModelConvention
{
    public void Apply(PageHandlerModel model)
    {
        // Access the PageHandlerModel
    }
}

Startup.cs :Startup.cs :

options.Conventions.Add(new GlobalPageHandlerModelConvention());

Konwencje akcji trasy stronyPage route action conventions

Domyślny dostawca modelu trasy, który pochodzi od IPageRouteModelProvider Konwencji Invoke, zaprojektowanych w celu zapewnienia punktów rozszerzalności do konfigurowania tras strony.The default route model provider that derives from IPageRouteModelProvider invokes conventions which are designed to provide extensibility points for configuring page routes.

Konwencja modelu trasy folderuFolder route model convention

Służy AddFolderRouteModelConvention do tworzenia i dodawania IPageRouteModelConvention , który wywołuje akcję na PageRouteModel wszystkich stronach w określonym folderze.Use AddFolderRouteModelConvention to create and add an IPageRouteModelConvention that invokes an action on the PageRouteModel for all of the pages under the specified folder.

Aplikacja Przykładowa używa AddFolderRouteModelConvention do dodawania {otherPagesTemplate?} szablonu trasy do stron w folderze OtherPages :The sample app uses AddFolderRouteModelConvention to add an {otherPagesTemplate?} route template to the pages in the OtherPages folder:

options.Conventions.AddFolderRouteModelConvention("/OtherPages", model =>
{
    var selectorCount = model.Selectors.Count;
    for (var i = 0; i < selectorCount; i++)
    {
        var selector = model.Selectors[i];
        model.Selectors.Add(new SelectorModel
        {
            AttributeRouteModel = new AttributeRouteModel
            {
                Order = 2,
                Template = AttributeRouteModel.CombineTemplates(
                    selector.AttributeRouteModel.Template, 
                    "{otherPagesTemplate?}"),
            }
        });
    }
});

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 2 .The Order property for the AttributeRouteModel is set to 2. Dzięki temu szablon dla {globalTemplate?} (ustawione wcześniej w temacie do 1 ) ma priorytet dla pierwszej pozycji wartości danych trasy, gdy podano wartość pojedynczej trasy.This ensures that the template for {globalTemplate?} (set earlier in the topic to 1) is given priority for the first route data value position when a single route value is provided. Jeśli zażądano strony w folderze Pages/OtherPages z wartością parametru trasy (na przykład /OtherPages/Page1/RouteDataValue ), "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] (), Order = 1 a nie RouteData.Values["otherPagesTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.If a page in the Pages/OtherPages folder is requested with a route parameter value (for example, /OtherPages/Page1/RouteDataValue), "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["otherPagesTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Zażądaj strony z przykładową stroną localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue i sprawdź wynik:Request the sample's Page1 page at localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue and inspect the result:

Żądanie Strona1 w folderze OtherPages z segmentem trasy GlobalRouteValue i OtherPagesRouteValue.

Konwencja modelu trasy stronyPage route model convention

Służy AddPageRouteModelConvention do tworzenia i dodawania IPageRouteModelConvention , który wywołuje akcję na PageRouteModel stronie dla strony o określonej nazwie.Use AddPageRouteModelConvention to create and add an IPageRouteModelConvention that invokes an action on the PageRouteModel for the page with the specified name.

Aplikacja Przykładowa używa AddPageRouteModelConvention do dodawania {aboutTemplate?} szablonu trasy do strony informacje:The sample app uses AddPageRouteModelConvention to add an {aboutTemplate?} route template to the About page:

options.Conventions.AddPageRouteModelConvention("/About", model =>
{
    var selectorCount = model.Selectors.Count;
    for (var i = 0; i < selectorCount; i++)
    {
        var selector = model.Selectors[i];
        model.Selectors.Add(new SelectorModel
        {
            AttributeRouteModel = new AttributeRouteModel
            {
                Order = 2,
                Template = AttributeRouteModel.CombineTemplates(
                    selector.AttributeRouteModel.Template, 
                    "{aboutTemplate?}"),
            }
        });
    }
});

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 2 .The Order property for the AttributeRouteModel is set to 2. Dzięki temu szablon dla {globalTemplate?} (ustawione wcześniej w temacie do 1 ) ma priorytet dla pierwszej pozycji wartości danych trasy, gdy podano wartość pojedynczej trasy.This ensures that the template for {globalTemplate?} (set earlier in the topic to 1) is given priority for the first route data value position when a single route value is provided. Jeśli zażądano strony o wartości parametru trasy w lokalizacji /About/RouteDataValue , "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["aboutTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.If the About page is requested with a route parameter value at /About/RouteDataValue, "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["aboutTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Zażądaj przykładowej strony o podanej godzinie localhost:5000/About/GlobalRouteValue/AboutRouteValue i sprawdź wynik:Request the sample's About page at localhost:5000/About/GlobalRouteValue/AboutRouteValue and inspect the result:

Żądanie strony about z segmentami trasy dla GlobalRouteValue i AboutRouteValue.

Dostosowywanie tras stron przy użyciu transformatora parametrówUse a parameter transformer to customize page routes

Trasy stron generowane przez ASP.NET Core mogą być dostosowywane przy użyciu transformatora parametrów.Page routes generated by ASP.NET Core can be customized using a parameter transformer. Transformator parametrów implementuje IOutboundParameterTransformer i przekształca wartość parametrów.A parameter transformer implements IOutboundParameterTransformer and transforms the value of parameters. Na przykład niestandardowy SlugifyParameterTransformer transformator parametrów zmienia SubscriptionManagement wartość trasy na subscription-management .For example, a custom SlugifyParameterTransformer parameter transformer changes the SubscriptionManagement route value to subscription-management.

PageRouteTransformerConventionKonwencja model trasy strony stosuje transformator parametrów do segmentów nazw folderów i plików w przypadku automatycznie generowanych tras stron w aplikacji.The PageRouteTransformerConvention page route model convention applies a parameter transformer to the folder and file name segments of automatically generated page routes in an app. Na przykład Razor plik Pages w lokalizacji /Pages/SubscriptionManagement/ViewAll.cshtml będzie mógł zostać ponownie zapisany w /SubscriptionManagement/ViewAll usłudze do /subscription-management/view-all .For example, the Razor Pages file at /Pages/SubscriptionManagement/ViewAll.cshtml would have its route rewritten from /SubscriptionManagement/ViewAll to /subscription-management/view-all.

PageRouteTransformerConvention przekształca automatycznie generowane segmenty trasy strony, która pochodzi z Razor folderu stron i nazwy pliku.PageRouteTransformerConvention only transforms the automatically generated segments of a page route that come from the Razor Pages folder and file name. Nie przekształca segmentów tras dodanych do @page dyrektywy.It doesn't transform route segments added with the @page directive. Konwencja nie przetwarza również tras dodanych przez AddPageRoute .The convention also doesn't transform routes added by AddPageRoute.

PageRouteTransformerConventionZarejestrowano jako opcję w Startup.ConfigureServices :The PageRouteTransformerConvention is registered as an option in Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.Add(
                new PageRouteTransformerConvention(
                    new SlugifyParameterTransformer()));
        });
}

public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
    public string TransformOutbound(object value)
    {
        if (value == null) { return null; }

        // Slugify value
        return Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
    }
}

Konfigurowanie trasy stronyConfigure a page route

Służy AddPageRoute do konfigurowania trasy do strony pod określoną ścieżką strony.Use AddPageRoute to configure a route to a page at the specified page path. Wygenerowane linki do strony używają określonej trasy.Generated links to the page use your specified route. AddPageRoute używa AddPageRouteModelConvention do ustanowienia trasy.AddPageRoute uses AddPageRouteModelConvention to establish the route.

Przykładowa aplikacja tworzy trasę do /TheContactPage Contact. cshtml :The sample app creates a route to /TheContactPage for Contact.cshtml :

options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");

Na stronie kontakt można również uzyskać dostęp do tej strony przy /Contact użyciu trasy domyślnej.The Contact page can also be reached at /Contact via its default route.

Niestandardowa trasa aplikacji przykładowej do strony kontaktowej umożliwia określenie opcjonalnego text segmentu trasy ( {text?} ).The sample app's custom route to the Contact page allows for an optional text route segment ({text?}). Strona zawiera również ten opcjonalny segment w swojej @page dyrektywie w przypadku, gdy osoba odwiedzająca uzyskuje dostęp do strony w swojej /Contact trasie:The page also includes this optional segment in its @page directive in case the visitor accesses the page at its /Contact route:

@page "{text?}"
@model ContactModel
@{
    ViewData["Title"] = "Contact";
}

<h1>@ViewData["Title"]</h1>
<h2>@Model.Message</h2>

<address>
    One Microsoft Way<br>
    Redmond, WA 98052-6399<br>
    <abbr title="Phone">P:</abbr>
    425.555.0100
</address>

<address>
    <strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br>
    <strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
</address>

<p>@Model.RouteDataTextTemplateValue</p>

Należy pamiętać, że adres URL wygenerowany dla linku kontaktowego na renderowanej stronie odzwierciedla zaktualizowaną trasę:Note that the URL generated for the Contact link in the rendered page reflects the updated route:

Link do kontaktu z przykładową aplikacją na pasku nawigacyjnym

Sprawdzanie linku kontaktu w renderowanym kodzie HTML wskazuje, że odwołanie href jest ustawione na wartość "/TheContactPage"

Odwiedź stronę kontaktową na swojej zwykłej trasie /Contact lub w niestandardowej trasie /TheContactPage .Visit the Contact page at either its ordinary route, /Contact, or the custom route, /TheContactPage. W przypadku podania dodatkowego text segmentu trasy na stronie jest wyświetlany segment zakodowany w formacie HTML, który jest dostarczany:If you supply an additional text route segment, the page shows the HTML-encoded segment that you provide:

Przykładowa przeglądarka brzegowa dostarczająca opcjonalny segment trasy "text" elementu "TextValue" w adresie URL.

Konwencje akcji modelu stronyPage model action conventions

Domyślny dostawca modelu strony, który implementuje IPageApplicationModelProvider konwencje wywołujące, zaprojektowane w celu zapewnienia punktów rozszerzalności do konfigurowania modeli stron.The default page model provider that implements IPageApplicationModelProvider invokes conventions which are designed to provide extensibility points for configuring page models. Konwencje te są przydatne podczas kompilowania i modyfikowania scenariuszy przetwarzania i odnajdywania stron.These conventions are useful when building and modifying page discovery and processing scenarios.

W przykładach w tej sekcji Przykładowa aplikacja używa AddHeaderAttribute klasy, która jest ResultFilterAttribute , która ma zastosowanie do nagłówka odpowiedzi:For the examples in this section, the sample app uses an AddHeaderAttribute class, which is a ResultFilterAttribute, that applies a response header:

public class AddHeaderAttribute : ResultFilterAttribute
{
    private readonly string _name;
    private readonly string[] _values;

    public AddHeaderAttribute(string name, string[] values)
    {
        _name = name;
        _values = values;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        context.HttpContext.Response.Headers.Add(_name, _values);
        base.OnResultExecuting(context);
    }
}

Przy użyciu konwencji, przykład pokazuje, jak zastosować atrybut do wszystkich stron w folderze i do pojedynczej strony.Using conventions, the sample demonstrates how to apply the attribute to all of the pages in a folder and to a single page.

Konwencja modelu aplikacji folderuFolder app model convention

Służy AddFolderApplicationModelConvention do tworzenia i dodawania IPageApplicationModelConvention , który wywołuje akcję w PageApplicationModel wystąpieniach dla wszystkich stron w określonym folderze.Use AddFolderApplicationModelConvention to create and add an IPageApplicationModelConvention that invokes an action on PageApplicationModel instances for all pages under the specified folder.

Przykład ilustruje użycie AddFolderApplicationModelConvention przez dodanie nagłówka, OtherPagesHeader do stron w folderze OtherPages aplikacji:The sample demonstrates the use of AddFolderApplicationModelConvention by adding a header, OtherPagesHeader, to the pages inside the OtherPages folder of the app:

options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
    model.Filters.Add(new AddHeaderAttribute(
        "OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});

Zażądaj przykładowej strony localhost:5000/OtherPages/Page1 i zbadaj nagłówki, aby wyświetlić wyniki:Request the sample's Page1 page at localhost:5000/OtherPages/Page1 and inspect the headers to view the result:

Nagłówki odpowiedzi strony OtherPages/Strona1 pokazują, że OtherPagesHeader został dodany.

Konwencja modelu aplikacji stronyPage app model convention

Służy AddPageApplicationModelConvention do tworzenia i dodawania IPageApplicationModelConvention , który wywołuje akcję na PageApplicationModel stronie dla strony o określonej nazwie.Use AddPageApplicationModelConvention to create and add an IPageApplicationModelConvention that invokes an action on the PageApplicationModel for the page with the specified name.

Przykład ilustruje użycie AddPageApplicationModelConvention przez dodanie nagłówka, AboutHeader do strony informacje:The sample demonstrates the use of AddPageApplicationModelConvention by adding a header, AboutHeader, to the About page:

options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
    model.Filters.Add(new AddHeaderAttribute(
        "AboutHeader", new string[] { "About Header Value" }));
});

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że AboutHeader został dodany.

Konfigurowanie filtruConfigure a filter

ConfigureFilter konfiguruje określony filtr, który ma zostać zastosowany.ConfigureFilter configures the specified filter to apply. Można zaimplementować klasę filtru, ale Przykładowa aplikacja pokazuje, jak zaimplementować filtr w wyrażeniu lambda, które jest zaimplementowane w tle jako fabryka, która zwraca filtr:You can implement a filter class, but the sample app shows how to implement a filter in a lambda expression, which is implemented behind-the-scenes as a factory that returns a filter:

options.Conventions.ConfigureFilter(model =>
{
    if (model.RelativePath.Contains("OtherPages/Page2"))
    {
        return new AddHeaderAttribute(
            "OtherPagesPage2Header", 
            new string[] { "OtherPages/Page2 Header Value" });
    }
    return new EmptyFilter();
});

Model aplikacji strony służy do sprawdzania ścieżki względnej dla segmentów, które prowadzą do strony PAGE2 w folderze OtherPages .The page app model is used to check the relative path for segments that lead to the Page2 page in the OtherPages folder. Jeśli warunek zostanie spełniony, zostanie dodany nagłówek.If the condition passes, a header is added. Jeśli nie, EmptyFilter jest stosowane.If not, the EmptyFilter is applied.

EmptyFilter jest filtrem akcji.EmptyFilter is an Action filter. Ze względu na to, że filtry akcji są ignorowane przez Razor strony, nie EmptyFilter ma ona wpływu na zamierzone, jeśli ścieżka nie zawiera OtherPages/Page2 .Since Action filters are ignored by Razor Pages, the EmptyFilter has no effect as intended if the path doesn't contain OtherPages/Page2.

Zażądaj strony PAGE2 próbki na localhost:5000/OtherPages/Page2 i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's Page2 page at localhost:5000/OtherPages/Page2 and inspect the headers to view the result:

OtherPagesPage2Header jest dodawany do odpowiedzi dla PAGE2.

Konfigurowanie fabryki filtrówConfigure a filter factory

ConfigureFilter konfiguruje określoną fabrykę do zastosowania filtrów do wszystkich Razor stron.ConfigureFilter configures the specified factory to apply filters to all Razor Pages.

Przykładowa aplikacja zawiera przykładowe użycie fabryki filtrów przez dodanie nagłówka, FilterFactoryHeader z dwoma wartościami do stron aplikacji:The sample app provides an example of using a filter factory by adding a header, FilterFactoryHeader, with two values to the app's pages:

options.Conventions.ConfigureFilter(new AddHeaderWithFactory());

AddHeaderWithFactory.cs :AddHeaderWithFactory.cs :

public class AddHeaderWithFactory : IFilterFactory
{
    // Implement IFilterFactory
    public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
    {
        return new AddHeaderFilter();
    }

    private class AddHeaderFilter : IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            context.HttpContext.Response.Headers.Add(
                "FilterFactoryHeader", 
                new string[] 
                { 
                    "Filter Factory Header Value 1",
                    "Filter Factory Header Value 2"
                });
        }

        public void OnResultExecuted(ResultExecutedContext context)
        {
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że dodano dwa nagłówki FilterFactoryHeader.

Filtry MVC i filtr strony (IPageFilter)MVC Filters and the Page filter (IPageFilter)

Filtry akcji MVC są ignorowane przez Razor strony, ponieważ Razor strony używają metod obsługi.MVC Action filters are ignored by Razor Pages, since Razor Pages use handler methods. Dostępne są inne typy filtrów MVC: autoryzacja, wyjątek, zasóbi wynik.Other types of MVC filters are available for you to use: Authorization, Exception, Resource, and Result. Aby uzyskać więcej informacji, zobacz temat filtry .For more information, see the Filters topic.

Filtr strony ( IPageFilter ) to filtr, który ma zastosowanie do Razor stron.The Page filter (IPageFilter) is a filter that applies to Razor Pages. Aby uzyskać więcej informacji, zobacz metody filtrowania dla Razor stron.For more information, see Filter methods for Razor Pages.

Dodatkowe zasobyAdditional resources

Dowiedz się, w jaki sposób używać konwencji dotyczących trasy strony i dostawcy modelu aplikacji do kontrolowania routingu, odnajdywania i przetwarzania stron w Razor aplikacjach.Learn how to use page route and app model provider conventions to control page routing, discovery, and processing in Razor Pages apps.

Jeśli trzeba skonfigurować niestandardowe trasy stron dla poszczególnych stron, skonfiguruj Routing do stron z Konwencją AddPageRoute opisanej w dalszej części tego tematu.When you need to configure custom page routes for individual pages, configure routing to pages with the AddPageRoute convention described later in this topic.

Aby określić trasę strony, dodać segmenty tras lub dodać parametry do trasy, użyj @page dyrektywy strony.To specify a page route, add route segments, or add parameters to a route, use the page's @page directive. Aby uzyskać więcej informacji, zobacz niestandardowe trasy.For more information, see Custom routes.

Istnieją słowa zastrzeżone, których nie można używać jako segmentów tras ani nazw parametrów.There are reserved words that can't be used as route segments or parameter names. Aby uzyskać więcej informacji, zobacz Routing: zastrzeżone nazwy routingu.For more information, see Routing: Reserved routing names.

Wyświetl lub pobierz przykładowy kod (jak pobrać)View or download sample code (how to download)

ScenariuszScenario Przykład ilustruje...The sample demonstrates ...
Konwencje modeluModel conventions

Konwencje. AddConventions.Add
  • IPageRouteModelConventionIPageRouteModelConvention
  • IPageApplicationModelConventionIPageApplicationModelConvention
  • IPageHandlerModelConventionIPageHandlerModelConvention
Dodaj szablon trasy i nagłówek do stron aplikacji.Add a route template and header to an app's pages.
Konwencje akcji trasy stronyPage route action conventions
  • AddFolderRouteModelConventionAddFolderRouteModelConvention
  • AddPageRouteModelConventionAddPageRouteModelConvention
  • AddPageRouteAddPageRoute
Dodaj szablon trasy do stron w folderze i do pojedynczej strony.Add a route template to pages in a folder and to a single page.
Konwencje akcji modelu stronyPage model action conventions
  • AddFolderApplicationModelConventionAddFolderApplicationModelConvention
  • AddPageApplicationModelConventionAddPageApplicationModelConvention
  • ConfigureFilter (Klasa filtru, wyrażenie lambda lub fabryka filtrów)ConfigureFilter (filter class, lambda expression, or filter factory)
Dodaj nagłówek do stron w folderze, Dodaj nagłówek do jednej strony i skonfiguruj fabrykę filtrów , aby dodać nagłówek do stron aplikacji.Add a header to pages in a folder, add a header to a single page, and configure a filter factory to add a header to an app's pages.

Razor Konwencje stron są dodawane i konfigurowane przy użyciu AddRazorPagesOptions metody rozszerzenia do AddMvc kolekcji usług w Startup klasie.Razor Pages conventions are added and configured using the AddRazorPagesOptions extension method to AddMvc on the service collection in the Startup class. Poniższe przykłady Konwencji zostały omówione w dalszej części tego tematu:The following convention examples are explained later in this topic:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddRazorPagesOptions(options =>
        {
            options.Conventions.Add( ... );
            options.Conventions.AddFolderRouteModelConvention(
                "/OtherPages", model => { ... });
            options.Conventions.AddPageRouteModelConvention(
                "/About", model => { ... });
            options.Conventions.AddPageRoute(
                "/Contact", "TheContactPage/{text?}");
            options.Conventions.AddFolderApplicationModelConvention(
                "/OtherPages", model => { ... });
            options.Conventions.AddPageApplicationModelConvention(
                "/About", model => { ... });
            options.Conventions.ConfigureFilter(model => { ... });
            options.Conventions.ConfigureFilter( ... );
        });
}

Kolejność trasRoute order

Trasy określają Order do przetwarzania (dopasowanie trasy).Routes specify an Order for processing (route matching).

ZamówienieOrder ZachowanieBehavior
-1-1 Trasa jest przetwarzana przed przetworzeniem innych tras.The route is processed before other routes are processed.
00 Nie określono kolejności (wartość domyślna).Order isn't specified (default value). Przypisanie Order ( Order = null ) domyślnie trasy Order do 0 (zero) do przetworzenia.Not assigning Order (Order = null) defaults the route Order to 0 (zero) for processing.
1, 2, … n1, 2, … n Określa kolejność przetwarzania trasy.Specifies the route processing order.

Przetwarzanie trasy zostało ustanowione według Konwencji:Route processing is established by convention:

  • Trasy są przetwarzane w kolejności sekwencyjnej (-1, 0, 1, 2, … n).Routes are processed in sequential order (-1, 0, 1, 2, … n).
  • Gdy trasy są takie same Order , najpierw pasuje do najbardziej określonej trasy, a następnie mniej konkretnych tras.When routes have the same Order, the most specific route is matched first followed by less specific routes.
  • Gdy trasy o tej samej Order i tej samej liczbie parametrów pasują do adresu URL żądania, trasy są przetwarzane w kolejności, w jakiej są dodawane do PageConventionCollection .When routes with the same Order and the same number of parameters match a request URL, routes are processed in the order that they're added to the PageConventionCollection.

Jeśli to możliwe, unikaj w zależności od ustalonej kolejności przetwarzania trasy.If possible, avoid depending on an established route processing order. Ogólnie rzecz biorąc, routing wybiera prawidłową trasę z dopasowywaniem adresów URL.Generally, routing selects the correct route with URL matching. Jeśli musisz ustawić właściwości trasy Order , aby poprawnie kierować żądania, schemat routingu aplikacji jest prawdopodobnie mylący dla klientów i jest nierozsądny do utrzymania.If you must set route Order properties to route requests correctly, the app's routing scheme is probably confusing to clients and fragile to maintain. Postaraj się, aby uprościć schemat routingu aplikacji.Seek to simplify the app's routing scheme. Przykładowa aplikacja wymaga jawnej kolejności przetwarzania trasy, aby przedstawić kilka scenariuszy routingu przy użyciu jednej aplikacji.The sample app requires an explicit route processing order to demonstrate several routing scenarios using a single app. Należy jednak podjąć próbę uniknięcia praktycznego ustawienia trasy Order w aplikacjach produkcyjnych.However, you should attempt to avoid the practice of setting route Order in production apps.

Razor Strony routingu i routingu kontrolera MVC współdzielą implementację.Razor Pages routing and MVC controller routing share an implementation. Informacje o zamówieniu trasy w tematach MVC są dostępne w obszarze routing do akcji kontrolera: porządkowanie tras atrybutów.Information on route order in the MVC topics is available at Routing to controller actions: Ordering attribute routes.

Konwencje modeluModel conventions

Dodaj delegata IPageConvention , aby dodać konwencje modelu , które mają zastosowanie do Razor stron.Add a delegate for IPageConvention to add model conventions that apply to Razor Pages.

Dodawanie Konwencji modelu trasy do wszystkich stronAdd a route model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageRouteModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu trasy strony.Use Conventions to create and add an IPageRouteModelConvention to the collection of IPageConvention instances that are applied during page route model construction.

Przykładowa aplikacja dodaje {globalTemplate?} szablon trasy do wszystkich stron w aplikacji:The sample app adds a {globalTemplate?} route template to all of the pages in the app:

public class GlobalTemplatePageRouteModelConvention 
    : IPageRouteModelConvention
{
    public void Apply(PageRouteModel model)
    {
        var selectorCount = model.Selectors.Count;
        for (var i = 0; i < selectorCount; i++)
        {
            var selector = model.Selectors[i];
            model.Selectors.Add(new SelectorModel
            {
                AttributeRouteModel = new AttributeRouteModel
                {
                    Order = 1,
                    Template = AttributeRouteModel.CombineTemplates(
                        selector.AttributeRouteModel.Template, 
                        "{globalTemplate?}"),
                }
            });
        }
    }
}

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 1 .The Order property for the AttributeRouteModel is set to 1. Zapewnia to zachowanie dopasowania trasy w przykładowej aplikacji:This ensures the following route matching behavior in the sample app:

  • Szablon trasy dla programu TheContactPage/{text?} został dodany w dalszej części tematu.A route template for TheContactPage/{text?} is added later in the topic. Trasa strony kontaktowej ma domyślną kolejność null ( Order = 0 ), więc pasuje przed {globalTemplate?} szablonem trasy.The Contact Page route has a default order of null (Order = 0), so it matches before the {globalTemplate?} route template.
  • {aboutTemplate?}Szablon trasy zostanie dodany w dalszej części tematu.An {aboutTemplate?} route template is added later in the topic. {aboutTemplate?}Szablon ma Order 2 .The {aboutTemplate?} template is given an Order of 2. Gdy strona informacje jest wymagana w lokalizacji /About/RouteDataValue , "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["aboutTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.When the About page is requested at /About/RouteDataValue, "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["aboutTemplate"] (Order = 2) due to setting the Order property.
  • {otherPagesTemplate?}Szablon trasy zostanie dodany w dalszej części tematu.An {otherPagesTemplate?} route template is added later in the topic. {otherPagesTemplate?}Szablon ma Order 2 .The {otherPagesTemplate?} template is given an Order of 2. Gdy zażądano dowolnej strony w folderze Pages/OtherPages z parametrem trasy (na przykład /OtherPages/Page1/RouteDataValue ), "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["otherPagesTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.When any page in the Pages/OtherPages folder is requested with a route parameter (for example, /OtherPages/Page1/RouteDataValue), "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["otherPagesTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Razor Opcje stron, takie jak dodawanie Conventions , są dodawane po dodaniu MVC do kolekcji usług w programie Startup.ConfigureServices .Razor Pages options, such as adding Conventions, are added when MVC is added to the service collection in Startup.ConfigureServices. Aby zapoznać się z przykładem, zobacz przykładową aplikację.For an example, see the sample app.

options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());

Zażądaj przykładowej strony o podanej godzinie localhost:5000/About/GlobalRouteValue i sprawdź wynik:Request the sample's About page at localhost:5000/About/GlobalRouteValue and inspect the result:

Strona informacje jest wymagana z segmentem trasy GlobalRouteValue.

Dodawanie Konwencji modelu aplikacji do wszystkich stronAdd an app model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageApplicationModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu aplikacji na stronie.Use Conventions to create and add an IPageApplicationModelConvention to the collection of IPageConvention instances that are applied during page app model construction.

Aby przedstawić te i inne konwencje w dalszej części tematu, przykładowa aplikacja zawiera AddHeaderAttribute klasę.To demonstrate this and other conventions later in the topic, the sample app includes an AddHeaderAttribute class. Konstruktor klasy akceptuje name ciąg i values tablicę ciągów.The class constructor accepts a name string and a values string array. Te wartości są używane w OnResultExecuting metodzie do ustawiania nagłówka odpowiedzi.These values are used in its OnResultExecuting method to set a response header. Pełna Klasa jest wyświetlana w sekcji konwencje akcji modelu strony w dalszej części tematu.The full class is shown in the Page model action conventions section later in the topic.

Przykładowa aplikacja używa AddHeaderAttribute klasy do dodawania nagłówka, GlobalHeader do wszystkich stron w aplikacji:The sample app uses the AddHeaderAttribute class to add a header, GlobalHeader, to all of the pages in the app:

public class GlobalHeaderPageApplicationModelConvention 
    : IPageApplicationModelConvention
{
    public void Apply(PageApplicationModel model)
    {
        model.Filters.Add(new AddHeaderAttribute(
            "GlobalHeader", new string[] { "Global Header Value" }));
    }
}

Startup.cs :Startup.cs :

options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że GlobalHeader został dodany.

Dodawanie Konwencji modelu programu obsługi do wszystkich stronAdd a handler model convention to all pages

Użyj, Conventions Aby utworzyć i dodać IPageHandlerModelConvention do kolekcji IPageConvention wystąpień, które są stosowane podczas konstruowania modelu obsługi stron.Use Conventions to create and add an IPageHandlerModelConvention to the collection of IPageConvention instances that are applied during page handler model construction.

public class GlobalPageHandlerModelConvention
    : IPageHandlerModelConvention
{
    public void Apply(PageHandlerModel model)
    {
        // Access the PageHandlerModel
    }
}

Startup.cs :Startup.cs :

options.Conventions.Add(new GlobalPageHandlerModelConvention());

Konwencje akcji trasy stronyPage route action conventions

Domyślny dostawca modelu trasy, który pochodzi od IPageRouteModelProvider Konwencji Invoke, zaprojektowanych w celu zapewnienia punktów rozszerzalności do konfigurowania tras strony.The default route model provider that derives from IPageRouteModelProvider invokes conventions which are designed to provide extensibility points for configuring page routes.

Konwencja modelu trasy folderuFolder route model convention

Służy AddFolderRouteModelConvention do tworzenia i dodawania IPageRouteModelConvention , który wywołuje akcję na PageRouteModel wszystkich stronach w określonym folderze.Use AddFolderRouteModelConvention to create and add an IPageRouteModelConvention that invokes an action on the PageRouteModel for all of the pages under the specified folder.

Aplikacja Przykładowa używa AddFolderRouteModelConvention do dodawania {otherPagesTemplate?} szablonu trasy do stron w folderze OtherPages :The sample app uses AddFolderRouteModelConvention to add an {otherPagesTemplate?} route template to the pages in the OtherPages folder:

options.Conventions.AddFolderRouteModelConvention("/OtherPages", model =>
{
    var selectorCount = model.Selectors.Count;
    for (var i = 0; i < selectorCount; i++)
    {
        var selector = model.Selectors[i];
        model.Selectors.Add(new SelectorModel
        {
            AttributeRouteModel = new AttributeRouteModel
            {
                Order = 2,
                Template = AttributeRouteModel.CombineTemplates(
                    selector.AttributeRouteModel.Template, 
                    "{otherPagesTemplate?}"),
            }
        });
    }
});

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 2 .The Order property for the AttributeRouteModel is set to 2. Dzięki temu szablon dla {globalTemplate?} (ustawione wcześniej w temacie do 1 ) ma priorytet dla pierwszej pozycji wartości danych trasy, gdy podano wartość pojedynczej trasy.This ensures that the template for {globalTemplate?} (set earlier in the topic to 1) is given priority for the first route data value position when a single route value is provided. Jeśli zażądano strony w folderze Pages/OtherPages z wartością parametru trasy (na przykład /OtherPages/Page1/RouteDataValue ), "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] (), Order = 1 a nie RouteData.Values["otherPagesTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.If a page in the Pages/OtherPages folder is requested with a route parameter value (for example, /OtherPages/Page1/RouteDataValue), "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["otherPagesTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Zażądaj strony z przykładową stroną localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue i sprawdź wynik:Request the sample's Page1 page at localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue and inspect the result:

Żądanie Strona1 w folderze OtherPages z segmentem trasy GlobalRouteValue i OtherPagesRouteValue.

Konwencja modelu trasy stronyPage route model convention

Służy AddPageRouteModelConvention do tworzenia i dodawania IPageRouteModelConvention , który wywołuje akcję na PageRouteModel stronie dla strony o określonej nazwie.Use AddPageRouteModelConvention to create and add an IPageRouteModelConvention that invokes an action on the PageRouteModel for the page with the specified name.

Aplikacja Przykładowa używa AddPageRouteModelConvention do dodawania {aboutTemplate?} szablonu trasy do strony informacje:The sample app uses AddPageRouteModelConvention to add an {aboutTemplate?} route template to the About page:

options.Conventions.AddPageRouteModelConvention("/About", model =>
{
    var selectorCount = model.Selectors.Count;
    for (var i = 0; i < selectorCount; i++)
    {
        var selector = model.Selectors[i];
        model.Selectors.Add(new SelectorModel
        {
            AttributeRouteModel = new AttributeRouteModel
            {
                Order = 2,
                Template = AttributeRouteModel.CombineTemplates(
                    selector.AttributeRouteModel.Template, 
                    "{aboutTemplate?}"),
            }
        });
    }
});

OrderWłaściwość dla elementu AttributeRouteModel jest ustawiona na 2 .The Order property for the AttributeRouteModel is set to 2. Dzięki temu szablon dla {globalTemplate?} (ustawione wcześniej w temacie do 1 ) ma priorytet dla pierwszej pozycji wartości danych trasy, gdy podano wartość pojedynczej trasy.This ensures that the template for {globalTemplate?} (set earlier in the topic to 1) is given priority for the first route data value position when a single route value is provided. Jeśli zażądano strony o wartości parametru trasy w lokalizacji /About/RouteDataValue , "RouteDataValue" jest ładowany do RouteData.Values["globalTemplate"] ( Order = 1 ), a nie RouteData.Values["aboutTemplate"] ( Order = 2 ) z powodu ustawienia Order właściwości.If the About page is requested with a route parameter value at /About/RouteDataValue, "RouteDataValue" is loaded into RouteData.Values["globalTemplate"] (Order = 1) and not RouteData.Values["aboutTemplate"] (Order = 2) due to setting the Order property.

Wszędzie tam, gdzie to możliwe, nie ustawiaj Order , która powoduje Order = 0 .Wherever possible, don't set the Order, which results in Order = 0. Należy polegać na routingu w celu wybrania odpowiedniej trasy.Rely on routing to select the correct route.

Zażądaj przykładowej strony o podanej godzinie localhost:5000/About/GlobalRouteValue/AboutRouteValue i sprawdź wynik:Request the sample's About page at localhost:5000/About/GlobalRouteValue/AboutRouteValue and inspect the result:

Żądanie strony about z segmentami trasy dla GlobalRouteValue i AboutRouteValue.

Konfigurowanie trasy stronyConfigure a page route

Służy AddPageRoute do konfigurowania trasy do strony pod określoną ścieżką strony.Use AddPageRoute to configure a route to a page at the specified page path. Wygenerowane linki do strony używają określonej trasy.Generated links to the page use your specified route. AddPageRoute używa AddPageRouteModelConvention do ustanowienia trasy.AddPageRoute uses AddPageRouteModelConvention to establish the route.

Przykładowa aplikacja tworzy trasę do /TheContactPage Contact. cshtml :The sample app creates a route to /TheContactPage for Contact.cshtml :

options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");

Na stronie kontakt można również uzyskać dostęp do tej strony przy /Contact użyciu trasy domyślnej.The Contact page can also be reached at /Contact via its default route.

Niestandardowa trasa aplikacji przykładowej do strony kontaktowej umożliwia określenie opcjonalnego text segmentu trasy ( {text?} ).The sample app's custom route to the Contact page allows for an optional text route segment ({text?}). Strona zawiera również ten opcjonalny segment w swojej @page dyrektywie w przypadku, gdy osoba odwiedzająca uzyskuje dostęp do strony w swojej /Contact trasie:The page also includes this optional segment in its @page directive in case the visitor accesses the page at its /Contact route:

@page "{text?}"
@model ContactModel
@{
    ViewData["Title"] = "Contact";
}

<h1>@ViewData["Title"]</h1>
<h2>@Model.Message</h2>

<address>
    One Microsoft Way<br>
    Redmond, WA 98052-6399<br>
    <abbr title="Phone">P:</abbr>
    425.555.0100
</address>

<address>
    <strong>Support:</strong> <a href="mailto:Support@example.com">Support@example.com</a><br>
    <strong>Marketing:</strong> <a href="mailto:Marketing@example.com">Marketing@example.com</a>
</address>

<p>@Model.RouteDataTextTemplateValue</p>

Należy pamiętać, że adres URL wygenerowany dla linku kontaktowego na renderowanej stronie odzwierciedla zaktualizowaną trasę:Note that the URL generated for the Contact link in the rendered page reflects the updated route:

Link do kontaktu z przykładową aplikacją na pasku nawigacyjnym

Sprawdzanie linku kontaktu w renderowanym kodzie HTML wskazuje, że odwołanie href jest ustawione na wartość "/TheContactPage"

Odwiedź stronę kontaktową na swojej zwykłej trasie /Contact lub w niestandardowej trasie /TheContactPage .Visit the Contact page at either its ordinary route, /Contact, or the custom route, /TheContactPage. W przypadku podania dodatkowego text segmentu trasy na stronie jest wyświetlany segment zakodowany w formacie HTML, który jest dostarczany:If you supply an additional text route segment, the page shows the HTML-encoded segment that you provide:

Przykładowa przeglądarka brzegowa dostarczająca opcjonalny segment trasy "text" elementu "TextValue" w adresie URL.

Konwencje akcji modelu stronyPage model action conventions

Domyślny dostawca modelu strony, który implementuje IPageApplicationModelProvider konwencje wywołujące, zaprojektowane w celu zapewnienia punktów rozszerzalności do konfigurowania modeli stron.The default page model provider that implements IPageApplicationModelProvider invokes conventions which are designed to provide extensibility points for configuring page models. Konwencje te są przydatne podczas kompilowania i modyfikowania scenariuszy przetwarzania i odnajdywania stron.These conventions are useful when building and modifying page discovery and processing scenarios.

W przykładach w tej sekcji Przykładowa aplikacja używa AddHeaderAttribute klasy, która jest ResultFilterAttribute , która ma zastosowanie do nagłówka odpowiedzi:For the examples in this section, the sample app uses an AddHeaderAttribute class, which is a ResultFilterAttribute, that applies a response header:

public class AddHeaderAttribute : ResultFilterAttribute
{
    private readonly string _name;
    private readonly string[] _values;

    public AddHeaderAttribute(string name, string[] values)
    {
        _name = name;
        _values = values;
    }

    public override void OnResultExecuting(ResultExecutingContext context)
    {
        context.HttpContext.Response.Headers.Add(_name, _values);
        base.OnResultExecuting(context);
    }
}

Przy użyciu konwencji, przykład pokazuje, jak zastosować atrybut do wszystkich stron w folderze i do pojedynczej strony.Using conventions, the sample demonstrates how to apply the attribute to all of the pages in a folder and to a single page.

Konwencja modelu aplikacji folderuFolder app model convention

Służy AddFolderApplicationModelConvention do tworzenia i dodawania IPageApplicationModelConvention , który wywołuje akcję w PageApplicationModel wystąpieniach dla wszystkich stron w określonym folderze.Use AddFolderApplicationModelConvention to create and add an IPageApplicationModelConvention that invokes an action on PageApplicationModel instances for all pages under the specified folder.

Przykład ilustruje użycie AddFolderApplicationModelConvention przez dodanie nagłówka, OtherPagesHeader do stron w folderze OtherPages aplikacji:The sample demonstrates the use of AddFolderApplicationModelConvention by adding a header, OtherPagesHeader, to the pages inside the OtherPages folder of the app:

options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
    model.Filters.Add(new AddHeaderAttribute(
        "OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});

Zażądaj przykładowej strony localhost:5000/OtherPages/Page1 i zbadaj nagłówki, aby wyświetlić wyniki:Request the sample's Page1 page at localhost:5000/OtherPages/Page1 and inspect the headers to view the result:

Nagłówki odpowiedzi strony OtherPages/Strona1 pokazują, że OtherPagesHeader został dodany.

Konwencja modelu aplikacji stronyPage app model convention

Służy AddPageApplicationModelConvention do tworzenia i dodawania IPageApplicationModelConvention , który wywołuje akcję na PageApplicationModel stronie dla strony o określonej nazwie.Use AddPageApplicationModelConvention to create and add an IPageApplicationModelConvention that invokes an action on the PageApplicationModel for the page with the specified name.

Przykład ilustruje użycie AddPageApplicationModelConvention przez dodanie nagłówka, AboutHeader do strony informacje:The sample demonstrates the use of AddPageApplicationModelConvention by adding a header, AboutHeader, to the About page:

options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
    model.Filters.Add(new AddHeaderAttribute(
        "AboutHeader", new string[] { "About Header Value" }));
});

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że AboutHeader został dodany.

Konfigurowanie filtruConfigure a filter

ConfigureFilter konfiguruje określony filtr, który ma zostać zastosowany.ConfigureFilter configures the specified filter to apply. Można zaimplementować klasę filtru, ale Przykładowa aplikacja pokazuje, jak zaimplementować filtr w wyrażeniu lambda, które jest zaimplementowane w tle jako fabryka, która zwraca filtr:You can implement a filter class, but the sample app shows how to implement a filter in a lambda expression, which is implemented behind-the-scenes as a factory that returns a filter:

options.Conventions.ConfigureFilter(model =>
{
    if (model.RelativePath.Contains("OtherPages/Page2"))
    {
        return new AddHeaderAttribute(
            "OtherPagesPage2Header", 
            new string[] { "OtherPages/Page2 Header Value" });
    }
    return new EmptyFilter();
});

Model aplikacji strony służy do sprawdzania ścieżki względnej dla segmentów, które prowadzą do strony PAGE2 w folderze OtherPages .The page app model is used to check the relative path for segments that lead to the Page2 page in the OtherPages folder. Jeśli warunek zostanie spełniony, zostanie dodany nagłówek.If the condition passes, a header is added. Jeśli nie, EmptyFilter jest stosowane.If not, the EmptyFilter is applied.

EmptyFilter jest filtrem akcji.EmptyFilter is an Action filter. Ze względu na to, że filtry akcji są ignorowane przez Razor strony, nie EmptyFilter ma ona wpływu na zamierzone, jeśli ścieżka nie zawiera OtherPages/Page2 .Since Action filters are ignored by Razor Pages, the EmptyFilter has no effect as intended if the path doesn't contain OtherPages/Page2.

Zażądaj strony PAGE2 próbki na localhost:5000/OtherPages/Page2 i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's Page2 page at localhost:5000/OtherPages/Page2 and inspect the headers to view the result:

OtherPagesPage2Header jest dodawany do odpowiedzi dla PAGE2.

Konfigurowanie fabryki filtrówConfigure a filter factory

ConfigureFilter konfiguruje określoną fabrykę do zastosowania filtrów do wszystkich Razor stron.ConfigureFilter configures the specified factory to apply filters to all Razor Pages.

Przykładowa aplikacja zawiera przykładowe użycie fabryki filtrów przez dodanie nagłówka, FilterFactoryHeader z dwoma wartościami do stron aplikacji:The sample app provides an example of using a filter factory by adding a header, FilterFactoryHeader, with two values to the app's pages:

options.Conventions.ConfigureFilter(new AddHeaderWithFactory());

AddHeaderWithFactory.cs :AddHeaderWithFactory.cs :

public class AddHeaderWithFactory : IFilterFactory
{
    // Implement IFilterFactory
    public IFilterMetadata CreateInstance(IServiceProvider serviceProvider)
    {
        return new AddHeaderFilter();
    }

    private class AddHeaderFilter : IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            context.HttpContext.Response.Headers.Add(
                "FilterFactoryHeader", 
                new string[] 
                { 
                    "Filter Factory Header Value 1",
                    "Filter Factory Header Value 2"
                });
        }

        public void OnResultExecuted(ResultExecutedContext context)
        {
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Zażądaj strony o podanej próbce localhost:5000/About i sprawdź nagłówki, aby wyświetlić wyniki:Request the sample's About page at localhost:5000/About and inspect the headers to view the result:

Nagłówki odpowiedzi na stronie informacje pokazują, że dodano dwa nagłówki FilterFactoryHeader.

Filtry MVC i filtr strony (IPageFilter)MVC Filters and the Page filter (IPageFilter)

Filtry akcji MVC są ignorowane przez Razor strony, ponieważ Razor strony używają metod obsługi.MVC Action filters are ignored by Razor Pages, since Razor Pages use handler methods. Dostępne są inne typy filtrów MVC: autoryzacja, wyjątek, zasóbi wynik.Other types of MVC filters are available for you to use: Authorization, Exception, Resource, and Result. Aby uzyskać więcej informacji, zobacz temat filtry .For more information, see the Filters topic.

Filtr strony ( IPageFilter ) to filtr, który ma zastosowanie do Razor stron.The Page filter (IPageFilter) is a filter that applies to Razor Pages. Aby uzyskać więcej informacji, zobacz metody filtrowania dla Razor stron.For more information, see Filter methods for Razor Pages.

Dodatkowe zasobyAdditional resources