RazorSměrování stránek a konvence aplikací v ASP.NET Core
Naučte se používat konvence směrování stránky a poskytovatele modelů aplikací k řízení směrování, zjišťování a zpracování stránky v Razor aplikacích stránky.
Pokud potřebujete nakonfigurovat vlastní trasy stránky pro jednotlivé stránky, nakonfigurujte směrování na stránky pomocí AddPageRoute konvence popsané dále v tomto tématu.
Chcete-li určit trasu stránky, přidat segmenty směrování nebo přidat parametry do trasy, použijte @page direktivu stránky. Další informace najdete v tématu vlastní trasy.
Existují vyhrazená slova, která nelze použít jako segmenty směrování nebo názvy parametrů. Další informace najdete v tématu směrování: názvy rezervovaných směrování.
Zobrazit nebo stáhnout ukázkový kód (Jak stáhnout)
| Scenario | Ukázka znázorňuje... |
|---|---|
| Modelové konvence Konvence. Add
|
Přidejte šablonu a hlavičku směrování na stránky aplikace. |
Konvence akcí při směrování stránky
|
Přidejte šablonu směrování do stránek ve složce a na jednu stránku. |
Konvence akcí modelu stránky
|
Umožňuje přidat záhlaví na stránky ve složce, přidat záhlaví na jednu stránku a nakonfigurovat objekt pro vytváření filtru tak, aby přidal hlavičku na stránky aplikace. |
Razor Konvence stránek jsou konfigurovány pomocí AddRazorPages přetížení, které konfiguruje RazorPagesOptions v Startup.ConfigureServices . Následující příklady konvence jsou vysvětleny dále v tomto tématu:
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( ... );
});
}
Pořadí směrování
Trasy určují Order pro zpracování (odpovídání tras).
| Objednávka | Chování |
|---|---|
| -1 | Trasa je zpracována před zpracováním jiných tras. |
| 0 | Pořadí není zadáno (výchozí hodnota). Nepřiřazuje se Order ( Order = null ) výchozí hodnota trasy Order na 0 (nula) pro zpracování. |
| 1, 2, … n | Určuje pořadí zpracování směrování. |
Zpracování směrování je zřízené podle konvence:
- Trasy jsou zpracovávány v sekvenčním pořadí (-1, 0, 1, 2, … n).
- V případě, že trasy mají stejný směr
Order, je nejdříve porovnána konkrétní trasa, za kterou následuje méně specifických tras. - Když se trasy se stejným
Orderpočtem parametrů shodují s adresou URL požadavku, trasy se zpracovávají v pořadí, v jakém jsou přidány do PageConventionCollection .
Pokud je to možné, vyhněte se v závislosti na zavedeném pořadí zpracování směrování. Obecně směrování vybírá správnou trasu s odpovídající adresou URL. Pokud musíte nastavit vlastnosti směrování Order na správně směrované požadavky, schéma směrování aplikace je pravděpodobně matoucí pro klienty a křehké na údržbu. Vyhledejte zjednodušené schéma směrování aplikace. Ukázková aplikace vyžaduje explicitní pořadí zpracování tras, které předvádí několik scénářů směrování pomocí jedné aplikace. Měli byste se však pokusit vyhnout postup nastavení trasy Order v produkčních aplikacích.
Razor Směrování stránek a směrování kontroléru MVC sdílí implementaci. Informace o pořadí směrování v tématech MVC jsou k dispozici při směrování na akce kontroleru: trasy atributů řazení.
Modelové konvence
Přidejte delegáta pro IPageConvention Přidání modelových konvencí , které se vztahují na Razor stránky.
Přidat konvenci modelu směrování na všechny stránky
Slouží Conventions k vytvoření a přidání IPageRouteModelConvention kolekce IPageConvention instancí, které se použijí během vytváření modelu směrování stránky.
Ukázková aplikace přidá {globalTemplate?} šablonu směrování na všechny stránky v aplikaci:
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?}"),
}
});
}
}
}
OrderVlastnost pro AttributeRouteModel je nastavena na 1 . Tím se zajistí následující chování při shodě trasy v ukázkové aplikaci:
- Šablona směrování pro
TheContactPage/{text?}je přidána později v tématu. Trasa stránky kontaktu má výchozí pořadínull(Order = 0), takže odpovídá před{globalTemplate?}šablonou směrování. {aboutTemplate?}Šablona směrování se přidá později v tématu.{aboutTemplate?}Šabloně je přidělenaOrder2. Když se na stránce o žádosti vyžádá/About/RouteDataValue, "RouteDataValue" se načte doRouteData.Values["globalTemplate"](Order = 1) aRouteData.Values["aboutTemplate"]ne (Order = 2) kvůli nastaveníOrderVlastnosti.{otherPagesTemplate?}Šablona směrování se přidá později v tématu.{otherPagesTemplate?}Šabloně je přidělenaOrder2. Pokud je pro libovolnou stránku ve složce Pages/OtherPages požadováno parametr trasy (například/OtherPages/Page1/RouteDataValue), je hodnota "RouteDataValue" načtena doRouteData.Values["globalTemplate"](Order = 1) a nikoliRouteData.Values["otherPagesTemplate"](Order = 2) z důvodu nastaveníOrderVlastnosti.
Pokud je to možné, nenastavte Order , které výsledky mají Order = 0 . Pro výběr správné trasy se spoléhá na směrování.
Razor Možnosti stránek, jako je například přidání Conventions , jsou přidány při Razor Přidání stránek do kolekce služeb v nástroji Startup.ConfigureServices . Příklad najdete v ukázkové aplikaci.
options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
Požádejte o stránku ukázek o stránce localhost:5000/About/GlobalRouteValue a Prohlédněte si výsledek:

Přidání konvence modelu aplikace na všechny stránky
Použijte Conventions k vytvoření a přidání IPageApplicationModelConvention do kolekce IPageConvention instancí, které se použijí během vytváření modelu aplikace stránky.
Chcete-li předvést tuto a další konvenci později v tématu, ukázková aplikace obsahuje AddHeaderAttribute třídu. Konstruktor třídy přijímá name řetězec a values pole řetězců. Tyto hodnoty jsou použity v OnResultExecuting metodě pro nastavení hlavičky odpovědi. Úplná třída je uvedena v části konvence akcí modelu stránky dále v tématu.
Ukázková aplikace používá AddHeaderAttribute třídu k přidání záhlaví, na GlobalHeader všechny stránky v aplikaci:
public class GlobalHeaderPageApplicationModelConvention
: IPageApplicationModelConvention
{
public void Apply(PageApplicationModel model)
{
model.Filters.Add(new AddHeaderAttribute(
"GlobalHeader", new string[] { "Global Header Value" }));
}
}
Startup. cs:
options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());
Požádejte o stránku ukázek o stránce localhost:5000/About a Prohlédněte si záhlaví a podívejte se na výsledek:

Přidat konvenci modelu obslužné rutiny na všechny stránky
Použijte Conventions k vytvoření a přidání IPageHandlerModelConvention do kolekce IPageConvention instancí, které jsou použity během vytváření modelu obslužné rutiny stránky.
public class GlobalPageHandlerModelConvention
: IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// Access the PageHandlerModel
}
}
Startup. cs:
options.Conventions.Add(new GlobalPageHandlerModelConvention());
Konvence akcí při směrování stránky
Výchozí zprostředkovatel modelu směrování, který je odvozen od IPageRouteModelProvider konvencí vyvolání, které jsou navrženy tak, aby poskytovaly body rozšiřitelnosti pro konfiguraci tras stránky.
Konvence modelu směrování složky
Slouží AddFolderRouteModelConvention k vytvoření a přidání IPageRouteModelConvention akce, která vyvolá akci PageRouteModel pro všechny stránky v zadané složce.
Ukázková aplikace používá AddFolderRouteModelConvention k přidání {otherPagesTemplate?} šablony směrování na stránky ve složce OtherPages :
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?}"),
}
});
}
});
OrderVlastnost pro AttributeRouteModel je nastavena na 2 . Tím se zajistí, že šablona pro {globalTemplate?} (nastavená výše v tématu na 1 ) má prioritu první pozice hodnoty dat trasy při zadání jedné hodnoty trasy. Pokud se stránka ve složce Pages/OtherPages požaduje s hodnotou parametru trasy (například /OtherPages/Page1/RouteDataValue ), "RouteDataValue" se načte do RouteData.Values["globalTemplate"] ( Order = 1 ) a ne RouteData.Values["otherPagesTemplate"] ( Order = 2 ) kvůli nastavení Order Vlastnosti.
Pokud je to možné, nenastavte Order , které výsledky mají Order = 0 . Pro výběr správné trasy se spoléhá na směrování.
Vyžádejte si Page1 stránku ukázky localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue a Prohlédněte si výsledek:

Konvence modelu směrování stránek
Slouží k vytvoření a přidání , která vyvolá akci na stránce AddPageRouteModelConvention IPageRouteModelConvention se PageRouteModel zadaným názvem.
Ukázková aplikace používá AddPageRouteModelConvention k přidání šablony trasy na stránku O {aboutTemplate?} aplikaci:
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?}"),
}
});
}
});
Vlastnost Order objektu je AttributeRouteModel nastavená na 2 . Tím se zajistí, že šablona pro (nastavená dříve v tématu na ) bude mít prioritu pro první pozici hodnoty dat trasy, když je zadaná {globalTemplate?} 1 jedna hodnota trasy. Pokud se kvůli nastavení vlastnosti vyžádá stránka O službě s parametrem trasy v , načte se hodnota RouteDataValue do ( ) a ne /About/RouteDataValue RouteData.Values["globalTemplate"] ( Order = 1 RouteData.Values["aboutTemplate"] Order = 2 Order ).
Všude, kde je to možné, Order nastavte , což vede k Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Vyžádejte si stránku o ukázce na adrese a localhost:5000/About/GlobalRouteValue/AboutRouteValue zkontrolujte výsledek:

Přizpůsobení tras stránek pomocí parameter transformeru
Trasy stránek generované službou ASP.NET Core je možné přizpůsobit pomocí parameter transformeru. Transformace parametrů implementuje a IOutboundParameterTransformer transformuje hodnotu parametrů. Například transformátor vlastních SlugifyParameterTransformer parametrů změní hodnotu trasy na SubscriptionManagement subscription-management .
Konvence modelu směrování stránky používá pro segmenty složek a názvů souborů automaticky generovaných tras stránek v PageRouteTransformerConvention aplikaci transformátor parametrů. Například soubor Pages v Razor /Pages/SubscriptionManagement/ViewAll.cshtml by přepsal svou trasu z /SubscriptionManagement/ViewAll na /subscription-management/view-all .
PageRouteTransformerConvention Transformuje pouze automaticky generované segmenty trasy stránky, které pocházejí ze složky Pages a Razor názvu souboru. Netransformuje segmenty tras přidané pomocí @page direktivy . Tato konvence také netransformuje trasy přidané pomocí AddPageRoute .
Parametr PageRouteTransformerConvention je zaregistrovaný jako možnost v 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();
}
}
Upozornění
Při použití System.Text.RegularExpressions ke zpracování nedůvěryhodného vstupu předejte časový limit. Uživatel se zlými úmysly může poskytnout vstup pro RegularExpressions útok DoS (Denial-of-Service). Rozhraní API rozhraní ASP.NET Core Framework, která používají RegularExpressions předávat časový limit.
Konfigurace trasy stránky
Slouží AddPageRoute ke konfiguraci trasy na stránku v zadané cestě stránky. Vygenerované odkazy na stránku používají zadanou trasu. AddPageRoute používá AddPageRouteModelConvention k vytvoření trasy.
Ukázková aplikace vytvoří trasu pro /TheContactPage Contact.cshtml:
options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");
Stránka Kontakt je také přístupná /Contact přes výchozí trasu.
Vlastní trasa ukázkové aplikace na stránku Kontakt umožňuje volitelný text segment trasy ( {text?} ). Stránka také obsahuje tento volitelný segment ve své direktivě pro případ, že návštěvník přistupuje @page na stránku na své /Contact trase:
@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>
Všimněte si, že adresa URL vygenerovaná pro odkaz Kontakt na vykreslené stránce odráží aktualizovanou trasu:


Navštivte stránku Kontakt na běžné trase /Contact nebo na vlastní trase /TheContactPage . Pokud zadáte další segment trasy, na stránce se zobrazí segment s kódováním text HTML, který poskytnete:

Konvence akcí modelu stránek
Výchozí poskytovatel modelu stránky, který implementuje, vyvolá konvence, které jsou navržené tak, aby poskytovaly body rozšiřitelnosti pro IPageApplicationModelProvider konfiguraci modelů stránek. Tyto konvence jsou užitečné při vytváření a úpravách scénářů zjišťování a zpracování stránek.
Pro příklady v této části používá ukázková aplikace třídu , což je třída , která používá AddHeaderAttribute ResultFilterAttribute hlavičku odpovědi:
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);
}
}
Pomocí konvencí ukázka ukazuje, jak použít atribut na všechny stránky ve složce a na jednu stránku.
Konvence modelu aplikace složek
Slouží k vytvoření a přidání objektu , který vyvolá akci na instancích pro všechny AddFolderApplicationModelConvention stránky v zadané IPageApplicationModelConvention PageApplicationModel složce.
Ukázka demonstruje použití přidáním hlavičky na stránky ve složce AddFolderApplicationModelConvention OtherPagesHeader OtherPages aplikace:
options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});
Vyžádejte si stránku Page1 ukázky na adrese a zkontrolujte localhost:5000/OtherPages/Page1 hlavičky, abyste si výsledek prohlédněte:

Konvence modelu stránkové aplikace
Slouží k vytvoření a přidání , která vyvolá akci na stránce AddPageApplicationModelConvention IPageApplicationModelConvention se PageApplicationModel zadaným názvem.
Ukázka demonstruje použití AddPageApplicationModelConvention přidáním hlavičky AboutHeader na stránku O službě:
options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"AboutHeader", new string[] { "About Header Value" }));
});
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Konfigurace filtru
ConfigureFilter nakonfiguruje zadaný filtr na použití. Můžete implementovat třídu filtru, ale ukázková aplikace ukazuje, jak implementovat filtr ve výrazu lambda, který je implementován na pozadí jako objekt pro vytváření, který vrací filtr:
options.Conventions.ConfigureFilter(model =>
{
if (model.RelativePath.Contains("OtherPages/Page2"))
{
return new AddHeaderAttribute(
"OtherPagesPage2Header",
new string[] { "OtherPages/Page2 Header Value" });
}
return new EmptyFilter();
});
Model aplikace stránky slouží ke kontrole relativní cesty pro segmenty, které vedou na stránku Page2 ve složce OtherPages. Pokud podmínka projde, přidá se hlavička. Pokud ne, EmptyFilter použije se .
EmptyFilter je filtr akce. Vzhledem k tomu, že filtry akcí jsou stránkami ignorovány, nemá objekt žádný zamýšlený účinek, pokud Razor EmptyFilter cesta neobsahuje OtherPages/Page2 .
Vyžádejte si stránku Page2 ukázky na adrese a zkontrolujte localhost:5000/OtherPages/Page2 hlavičky, abyste si výsledek prohlédněte:

Konfigurace objekt pro vytváření filtrů
ConfigureFilter nakonfiguruje zadanou továrnu na použití filtrů na všechny Razor stránky.
Ukázková aplikace nabízí příklad použití objektu pro vytváření filtrů přidáním hlavičky se dvěma hodnotami na FilterFactoryHeader stránky aplikace:
options.Conventions.ConfigureFilter(new AddHeaderWithFactory());
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;
}
}
}
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Filtry MVC a filtr stránky (IPageFilter)
Filtry akcí MVC stránky ignorují, Razor protože Pages používají metody obslužné Razor rutiny. K dispozici jsou další typy filtrů MVC: Autorizace, Výjimka, Prostředeka Výsledek. Další informace najdete v tématu Filtry.
Filtr Stránky ( IPageFilter ) je filtr, který se vztahuje na Razor stránky. Další informace najdete v tématu Metody filtrování pro Razor stránky.
Další zdroje informací
Naučte se používat trasy stránek a konvence poskytovatelů modelů aplikací k řízení směrování, zjišťování a zpracování stránek v Razor aplikacích Pages.
Pokud potřebujete nakonfigurovat vlastní trasy stránek pro jednotlivé stránky, nakonfigurujte směrování na stránky pomocí konvence AddPageRoute popsané dále v tomto tématu.
Pokud chcete zadat trasu stránky, přidat segmenty tras nebo přidat do trasy parametry, použijte direktivu @page stránky. Další informace najdete v tématu Vlastní trasy.
Existují vyhrazená slova, která nelze použít jako segmenty tras nebo názvy parametrů. Další informace najdete v tématu Směrování: Vyhrazené názvy směrování.
Zobrazení nebo stažení ukázkového kódu (stažení)
| Scenario | Ukázka ukazuje... |
|---|---|
| Modelové konvence Conventions.Add
|
Přidejte šablonu trasy a hlavičku na stránky aplikace. |
Konvence akcí směrování stránek
|
Přidejte šablonu trasy na stránky ve složce a na jednu stránku. |
Konvence akcí modelu stránek
|
Přidejte záhlaví na stránky ve složce, přidejte záhlaví na jednu stránku a nakonfigurujte objekt pro vytváření filtrů tak, aby na stránky aplikace přidá hlavičku. |
Razor Konvence stránek se přidávají a konfiguruje pomocí metody rozšíření pro v AddRazorPagesOptions kolekci služby ve třídě AddMvc Startup . Následující příklady konvencí jsou vysvětleny dále v tomto tématu:
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( ... );
});
}
Pořadí tras
Trasy určují pro Order zpracování (párování tras).
| Objednávka | Chování |
|---|---|
| -1 | Trasa se zpracuje před zpracováním dalších tras. |
| 0 | Order (Objednávka) není zadaná (výchozí hodnota). Při nepřiřazování ( ) se jako výchozí trasa pro zpracování přiřadí Order Order = null hodnota Order 0 (nula). |
| 1, 2, … n | Určuje pořadí zpracování tras. |
Zpracování tras se stanoví podle konvence:
- Trasy se zpracovávají v sekvenčním pořadí (-1, 0, 1, 2, … n).
- Pokud trasy mají stejnou shodu, nejvíce konkrétní trasa se nejprve porovná s méně
Orderspecifickými trasami. - Pokud trasy se stejným počtem parametrů odpovídají adrese URL požadavku, trasy se zpracují v pořadí, ve které se
Orderpřidávají do PageConventionCollection .
Pokud je to možné, vyhněte se v závislosti na stanoveném pořadí zpracování tras. Směrování obecně vybere správnou trasu s odpovídající adresou URL. Pokud musíte nastavit vlastnosti trasy pro správné směrování požadavků, je schéma směrování aplikace pravděpodobně matoucí pro klienty a údržba Order je nepřehledná. Hledejte zjednodušení schématu směrování aplikace. Ukázková aplikace vyžaduje explicitní pořadí zpracování tras, aby bylo možné pomocí jedné aplikace předvést několik scénářů směrování. Měli byste se ale pokusit vyhnout postupu nastavení trasy v Order produkčních aplikacích.
Razor Směrování stránek a směrování kontroleru MVC sdílejí implementaci. Informace o pořadí tras v tématech o MVC jsou k dispozici v tématu Směrování na akce kontroleru: Řazení tras atributů.
Modelové konvence
Přidejte delegáta pro IPageConvention , který přidá konvence modelu, které platí pro Razor Pages.
Přidání konvence modelu tras na všechny stránky
Slouží k vytvoření a přidání do kolekce instancí, které jsou Conventions použity během vytváření modelu trasy IPageRouteModelConvention IPageConvention stránky.
Ukázková aplikace přidá {globalTemplate?} šablonu trasy na všechny stránky v aplikaci:
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?}"),
}
});
}
}
}
Vlastnost Order objektu je AttributeRouteModel nastavená na 1 . Tím se zajistí následující chování při porovnávání tras v ukázkové aplikaci:
- Šablona trasy pro
TheContactPage/{text?}se přidá později v tématu. Trasa Kontaktní stránka má výchozí pořadí ( ), takže se shoduje přednullOrder = 0{globalTemplate?}šablonou trasy. - Šablona
{aboutTemplate?}trasy se přidá později v tématu. Šablona{aboutTemplate?}má parametrOrder2. Při vyžádání stránky O službě se kvůli nastavení vlastnosti načte hodnota RouteDataValue do ( ) a ne/About/RouteDataValueRouteData.Values["globalTemplate"](Order = 1RouteData.Values["aboutTemplate"]Order = 2Order). - Šablona
{otherPagesTemplate?}trasy se přidá později v tématu. Šablona{otherPagesTemplate?}má parametrOrder2. Pokud se kvůli nastavení vlastnosti požaduje jakákoli stránka ve složce Pages/OtherPages s parametrem trasy (například ), načte se routeDataValue do ( ) a ne/OtherPages/Page1/RouteDataValueRouteData.Values["globalTemplate"](Order = 1RouteData.Values["otherPagesTemplate"]Order = 2Order).
Všude, kde je to možné, nastavte Order , což má za výsledek Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Razor Možnosti stránek, například přidání , se při přidání MVC do kolekce služby v Conventions Startup.ConfigureServices přidávají. Příklad najdete v ukázkové aplikaci.
options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
Vyžádejte si stránku o ukázce na adrese a localhost:5000/About/GlobalRouteValue prohlédněte si výsledek:

Přidání konvence modelu aplikace na všechny stránky
Slouží k vytvoření a přidání do kolekce instancí, které jsou Conventions použity během vytváření modelu aplikace IPageApplicationModelConvention IPageConvention stránky.
K předvedení této a dalších konvencí dále v tomto tématu obsahuje ukázková aplikace AddHeaderAttribute třídu . Konstruktor třídy přijímá řetězec name a values pole řetězců. Tyto hodnoty se ve své OnResultExecuting metodě používají k nastavení hlavičky odpovědi. Úplná třída je uvedena v části Konvence akcí modelu stránky dále v tématu.
Ukázková aplikace používá třídu k přidání hlavičky na všechny AddHeaderAttribute stránky v GlobalHeader aplikaci:
public class GlobalHeaderPageApplicationModelConvention
: IPageApplicationModelConvention
{
public void Apply(PageApplicationModel model)
{
model.Filters.Add(new AddHeaderAttribute(
"GlobalHeader", new string[] { "Global Header Value" }));
}
}
Startup.cs:
options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Přidání konvence modelu obslužné rutiny na všechny stránky
Slouží k vytvoření a přidání do kolekce instancí, které jsou použity během vytváření modelu Conventions IPageHandlerModelConvention obslužné rutiny IPageConvention stránky.
public class GlobalPageHandlerModelConvention
: IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// Access the PageHandlerModel
}
}
Startup.cs:
options.Conventions.Add(new GlobalPageHandlerModelConvention());
Konvence akcí směrování stránek
Výchozí poskytovatel modelu směrování odvozený z vyvolává konvence, které jsou navrženy tak, aby poskytovaly body rozšiřitelnosti pro IPageRouteModelProvider konfiguraci tras stránek.
Konvence modelu směrování složek
Slouží k vytvoření a přidání , která vyvolá akci na pro všechny stránky AddFolderRouteModelConvention IPageRouteModelConvention v zadané PageRouteModel složce.
Ukázková aplikace používá AddFolderRouteModelConvention k přidání šablony trasy na stránky ve {otherPagesTemplate?} složce OtherPages:
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?}"),
}
});
}
});
Vlastnost Order objektu je AttributeRouteModel nastavená na 2 . Tím se zajistí, že šablona pro (nastavená dříve v tématu na ) bude mít prioritu pro první pozici hodnoty dat trasy, pokud je zadaná {globalTemplate?} 1 jedna hodnota trasy. Pokud se kvůli nastavení vlastnosti vyžádá stránka ve složce Pages/OtherPages s hodnotou parametru trasy (například ), načte se routeDataValue do ( ) a ne /OtherPages/Page1/RouteDataValue RouteData.Values["globalTemplate"] ( Order = 1 RouteData.Values["otherPagesTemplate"] Order = 2 Order ).
Všude, kde je to možné, nastavte Order , což má za výsledek Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Vyžádejte si stránku Page1 ukázky na adrese a localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue zkontrolujte výsledek:

Konvence modelu směrování stránek
Slouží k vytvoření a přidání , která vyvolá akci na stránce AddPageRouteModelConvention IPageRouteModelConvention se PageRouteModel zadaným názvem.
Ukázková aplikace používá AddPageRouteModelConvention k přidání šablony trasy na stránku O {aboutTemplate?} aplikaci:
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?}"),
}
});
}
});
Vlastnost Order objektu je AttributeRouteModel nastavená na 2 . Tím se zajistí, že šablona pro (nastavená dříve v tématu na ) bude mít prioritu pro první pozici hodnoty dat trasy, pokud je zadaná {globalTemplate?} 1 jedna hodnota trasy. Pokud se kvůli nastavení vlastnosti vyžádá stránka O službě s parametrem trasy v , načte se hodnota RouteDataValue do ( ) a ne /About/RouteDataValue RouteData.Values["globalTemplate"] ( Order = 1 RouteData.Values["aboutTemplate"] Order = 2 Order ).
Všude, kde je to možné, nastavte Order , což má za výsledek Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Vyžádejte si stránku o ukázce na adrese a localhost:5000/About/GlobalRouteValue/AboutRouteValue prohlédněte si výsledek:

Přizpůsobení tras stránek pomocí parameter transformeru
Trasy stránek generované službou ASP.NET Core lze přizpůsobit pomocí parameter transformeru. Transformace parametrů implementuje a IOutboundParameterTransformer transformuje hodnotu parametrů. Například transformátor vlastních SlugifyParameterTransformer parametrů změní hodnotu trasy na SubscriptionManagement subscription-management .
Konvence modelu směrování stránky používá pro segmenty složek a názvů souborů automaticky generovaných tras stránek v PageRouteTransformerConvention aplikaci transformátor parametrů. Například soubor Pages v Razor /Pages/SubscriptionManagement/ViewAll.cshtml by přepsal svou trasu z /SubscriptionManagement/ViewAll na /subscription-management/view-all .
PageRouteTransformerConvention Transformuje pouze automaticky generované segmenty trasy stránky, které pocházejí ze složky Pages a Razor názvu souboru. Netransformuje segmenty tras přidané pomocí @page direktivy . Tato konvence také netransformuje trasy přidané pomocí AddPageRoute .
Parametr PageRouteTransformerConvention je zaregistrovaný jako možnost v 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();
}
}
Konfigurace trasy stránky
Slouží AddPageRoute ke konfiguraci trasy na stránku v zadané cestě stránky. Vygenerované odkazy na stránku používají zadanou trasu. AddPageRoute používá AddPageRouteModelConvention k vytvoření trasy.
Ukázková aplikace vytvoří trasu pro /TheContactPage Contact.cshtml:
options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");
Stránka Kontakt je také přístupná /Contact přes výchozí trasu.
Vlastní trasa ukázkové aplikace na stránku Kontakt umožňuje volitelný text segment trasy ( {text?} ). Stránka také obsahuje tento volitelný segment ve své direktivě pro případ, že návštěvník přistupuje @page na stránku na své /Contact trase:
@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>
Všimněte si, že adresa URL vygenerovaná pro odkaz Kontakt na vykreslené stránce odráží aktualizovanou trasu:


Navštivte stránku Kontakt na běžné trase /Contact nebo na vlastní trase /TheContactPage . Pokud zadáte další segment trasy, na stránce se zobrazí segment s kódováním text HTML, který poskytnete:

Konvence akcí modelu stránek
Výchozí poskytovatel modelu stránky, který implementuje, vyvolá konvence, které jsou navrženy tak, aby poskytovaly body rozšiřitelnosti IPageApplicationModelProvider pro konfiguraci modelů stránek. Tyto konvence jsou užitečné při vytváření a úpravách scénářů zjišťování a zpracování stránek.
Pro příklady v této části používá ukázková aplikace třídu , což je třída , která používá AddHeaderAttribute ResultFilterAttribute hlavičku odpovědi:
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);
}
}
Pomocí konvencí ukázka ukazuje, jak použít atribut na všechny stránky ve složce a na jednu stránku.
Konvence modelu aplikace složek
Slouží k vytvoření a přidání objektu , který vyvolá akci na instancích pro všechny AddFolderApplicationModelConvention stránky v zadané IPageApplicationModelConvention PageApplicationModel složce.
Ukázka demonstruje použití přidáním hlavičky na stránky ve složce AddFolderApplicationModelConvention OtherPagesHeader OtherPages aplikace:
options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});
Vyžádejte si stránku Page1 ukázky na adrese a zkontrolujte localhost:5000/OtherPages/Page1 hlavičky, abyste si výsledek prohlédněte:

Konvence modelu aplikace stránky
Slouží k vytvoření a přidání , která vyvolá akci na stránce AddPageApplicationModelConvention IPageApplicationModelConvention se PageApplicationModel zadaným názvem.
Ukázka demonstruje použití AddPageApplicationModelConvention přidáním hlavičky AboutHeader na stránku O službě:
options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"AboutHeader", new string[] { "About Header Value" }));
});
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Konfigurace filtru
ConfigureFilter nakonfiguruje zadaný filtr na použití. Můžete implementovat třídu filtru, ale ukázková aplikace ukazuje, jak implementovat filtr ve výrazu lambda, který je implementován na pozadí jako objekt pro vytváření, který vrací filtr:
options.Conventions.ConfigureFilter(model =>
{
if (model.RelativePath.Contains("OtherPages/Page2"))
{
return new AddHeaderAttribute(
"OtherPagesPage2Header",
new string[] { "OtherPages/Page2 Header Value" });
}
return new EmptyFilter();
});
Model aplikace stránky slouží ke kontrole relativní cesty pro segmenty, které vedou na stránku Page2 ve složce OtherPages. Pokud podmínka projde, přidá se hlavička. Pokud ne, EmptyFilter použije se .
EmptyFilter je filtr akce. Vzhledem k tomu, že filtry akcí jsou stránkami ignorovány, nemá objekt žádný zamýšlený účinek, pokud Razor EmptyFilter cesta neobsahuje OtherPages/Page2 .
Vyžádejte si stránku Page2 ukázky na adrese a zkontrolujte localhost:5000/OtherPages/Page2 hlavičky, abyste si výsledek prohlédněte:

Konfigurace objekt pro vytváření filtrů
ConfigureFilter nakonfiguruje zadanou továrnu na použití filtrů na všechny Razor stránky.
Ukázková aplikace nabízí příklad použití objektu pro vytváření filtrů přidáním hlavičky se dvěma hodnotami na FilterFactoryHeader stránky aplikace:
options.Conventions.ConfigureFilter(new AddHeaderWithFactory());
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;
}
}
}
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Filtry MVC a filtr stránky (IPageFilter)
Filtry akcí MVC stránky ignorují, Razor protože Pages používají metody obslužné Razor rutiny. K dispozici jsou další typy filtrů MVC: Autorizace, Výjimka, Prostředeka Výsledek. Další informace najdete v tématu Filtry.
Filtr Stránky ( IPageFilter ) je filtr, který se vztahuje na Razor stránky. Další informace najdete v tématu Metody filtrování pro Razor stránky.
Další zdroje informací
Naučte se používat trasy stránek a konvence poskytovatelů modelů aplikací k řízení směrování, zjišťování a zpracování stránek v Razor aplikacích Pages.
Pokud potřebujete nakonfigurovat vlastní trasy stránek pro jednotlivé stránky, nakonfigurujte směrování na stránky pomocí konvence AddPageRoute popsané dále v tomto tématu.
Pokud chcete zadat trasu stránky, přidat segmenty tras nebo přidat do trasy parametry, použijte direktivu @page stránky. Další informace najdete v tématu Vlastní trasy.
Existují vyhrazená slova, která nelze použít jako segmenty tras nebo názvy parametrů. Další informace najdete v tématu Směrování: Vyhrazené názvy směrování.
Zobrazení nebo stažení ukázkového kódu (stažení)
| Scenario | Ukázka ukazuje... |
|---|---|
| Modelové konvence Conventions.Add
|
Přidejte šablonu trasy a hlavičku na stránky aplikace. |
Konvence akcí směrování stránek
|
Přidejte šablonu trasy na stránky ve složce a na jednu stránku. |
Konvence akcí modelu stránek
|
Přidejte záhlaví na stránky ve složce, přidejte záhlaví na jednu stránku a nakonfigurujte objekt pro vytváření filtrů tak, aby na stránky aplikace přidá hlavičku. |
Razor Konvence stránek se přidávají a konfiguruje pomocí metody rozšíření pro v AddRazorPagesOptions kolekci služby ve třídě AddMvc Startup . Následující příklady konvencí jsou vysvětleny dále v tomto tématu:
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( ... );
});
}
Pořadí tras
Trasy určují pro Order zpracování (párování tras).
| Objednávka | Chování |
|---|---|
| -1 | Trasa se zpracuje před zpracováním dalších tras. |
| 0 | Order (Objednávka) není zadaná (výchozí hodnota). Při nepřiřazování ( ) se jako výchozí trasa pro zpracování přiřadí Order Order = null hodnota Order 0 (nula). |
| 1, 2, … n | Určuje pořadí zpracování tras. |
Zpracování tras se stanoví podle konvence:
- Trasy se zpracovávají v sekvenčním pořadí (-1, 0, 1, 2, … n).
- Pokud trasy mají stejnou shodu, nejvíce konkrétní trasa se nejprve porovná s méně
Orderspecifickými trasami. - Pokud trasy se stejným počtem parametrů odpovídají adrese URL požadavku, trasy se zpracují v pořadí, ve které se
Orderpřidávají do PageConventionCollection .
Pokud je to možné, vyhněte se v závislosti na stanoveném pořadí zpracování tras. Směrování obecně vybírá správnou trasu s odpovídající adresou URL. Pokud musíte nastavit vlastnosti trasy tak, aby směrovat požadavky správně, schéma směrování aplikace je pravděpodobně matoucí pro klienty a údržba Order je nepřehledná. Hledejte zjednodušení schématu směrování aplikace. Ukázková aplikace vyžaduje explicitní pořadí zpracování tras, aby bylo možné pomocí jedné aplikace předvést několik scénářů směrování. Měli byste se ale pokusit vyhnout postupu nastavení trasy v Order produkčních aplikacích.
Razor Směrování stránek a směrování kontroleru MVC sdílejí implementaci. Informace o pořadí tras v tématech o MVC jsou k dispozici v tématu Směrování na akce kontroleru: Řazení tras atributů.
Modelové konvence
Přidejte delegáta pro IPageConvention , který přidá konvence modelu, které platí pro Razor Pages.
Přidání konvence modelu tras na všechny stránky
Slouží k vytvoření a přidání do kolekce instancí, které jsou Conventions použity během vytváření modelu trasy IPageRouteModelConvention IPageConvention stránky.
Ukázková aplikace přidá {globalTemplate?} šablonu trasy na všechny stránky v aplikaci:
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?}"),
}
});
}
}
}
Vlastnost Order objektu je AttributeRouteModel nastavená na 1 . Tím se zajistí následující chování při porovnávání tras v ukázkové aplikaci:
- Šablona trasy pro
TheContactPage/{text?}se přidá později v tématu. Trasa Kontaktní stránka má výchozí pořadí ( ), takže se shoduje přednullOrder = 0{globalTemplate?}šablonou trasy. - Šablona
{aboutTemplate?}trasy se přidá později v tématu. Šablona{aboutTemplate?}má parametrOrder2. Při vyžádání stránky O službě se kvůli nastavení vlastnosti načte hodnota RouteDataValue do ( ) a ne/About/RouteDataValueRouteData.Values["globalTemplate"](Order = 1RouteData.Values["aboutTemplate"]Order = 2Order). - Šablona
{otherPagesTemplate?}trasy se přidá později v tématu. Šablona{otherPagesTemplate?}má parametrOrder2. Pokud se kvůli nastavení vlastnosti požaduje jakákoli stránka ve složce Pages/OtherPages s parametrem trasy (například ), načte se routeDataValue do ( ) a ne/OtherPages/Page1/RouteDataValueRouteData.Values["globalTemplate"](Order = 1RouteData.Values["otherPagesTemplate"]Order = 2Order).
Všude, kde je to možné, nastavte Order , což má za výsledek Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Razor Možnosti stránek, například přidání , se při přidání MVC do kolekce služby v Conventions Startup.ConfigureServices přidávají. Příklad najdete v ukázkové aplikaci.
options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
Vyžádejte si stránku o ukázce na adrese a localhost:5000/About/GlobalRouteValue prohlédněte si výsledek:

Přidání konvence modelu aplikace na všechny stránky
Slouží k vytvoření a přidání do kolekce instancí, které jsou Conventions použity během vytváření modelu aplikace IPageApplicationModelConvention IPageConvention stránky.
K předvedení této a dalších konvencí dále v tomto tématu obsahuje ukázková aplikace AddHeaderAttribute třídu . Konstruktor třídy přijímá řetězec name a values pole řetězců. Tyto hodnoty se ve své OnResultExecuting metodě používají k nastavení hlavičky odpovědi. Úplná třída je uvedena v části Konvence akcí modelu stránky dále v tématu.
Ukázková aplikace používá AddHeaderAttribute třídu k přidání hlavičky na všechny stránky GlobalHeader v aplikaci:
public class GlobalHeaderPageApplicationModelConvention
: IPageApplicationModelConvention
{
public void Apply(PageApplicationModel model)
{
model.Filters.Add(new AddHeaderAttribute(
"GlobalHeader", new string[] { "Global Header Value" }));
}
}
Startup.cs:
options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Přidání konvence modelu obslužné rutiny na všechny stránky
Slouží k vytvoření a přidání do kolekce instancí, které jsou použity během vytváření modelu Conventions IPageHandlerModelConvention obslužné rutiny IPageConvention stránky.
public class GlobalPageHandlerModelConvention
: IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// Access the PageHandlerModel
}
}
Startup.cs:
options.Conventions.Add(new GlobalPageHandlerModelConvention());
Konvence akcí směrování stránek
Výchozí poskytovatel modelu směrování odvozený z vyvolává konvence, které jsou navrženy tak, aby poskytovaly body rozšiřitelnosti pro IPageRouteModelProvider konfiguraci tras stránek.
Konvence modelu směrování složek
Slouží k vytvoření a přidání , která vyvolá akci na pro všechny stránky AddFolderRouteModelConvention IPageRouteModelConvention v zadané PageRouteModel složce.
Ukázková aplikace používá AddFolderRouteModelConvention k přidání šablony trasy na stránky ve {otherPagesTemplate?} složce OtherPages:
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?}"),
}
});
}
});
Vlastnost Order objektu je AttributeRouteModel nastavená na 2 . Tím se zajistí, že šablona pro (nastavená dříve v tématu na ) bude mít prioritu pro první pozici hodnoty dat trasy, když je zadaná {globalTemplate?} 1 jedna hodnota trasy. Pokud se kvůli nastavení vlastnosti vyžádá stránka ve složce Pages/OtherPages s hodnotou parametru trasy (například ), načte se RouteDataValue do ( ) a ne /OtherPages/Page1/RouteDataValue RouteData.Values["globalTemplate"] ( Order = 1 RouteData.Values["otherPagesTemplate"] Order = 2 Order ).
Všude, kde je to možné, nastavte Order , což má za výsledek Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Vyžádejte si stránku Page1 ukázky na adrese a localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue zkontrolujte výsledek:

Konvence modelu směrování stránek
Slouží k vytvoření a přidání , která vyvolá akci na stránce AddPageRouteModelConvention IPageRouteModelConvention se PageRouteModel zadaným názvem.
Ukázková aplikace používá AddPageRouteModelConvention k přidání šablony trasy na stránku O {aboutTemplate?} aplikaci:
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?}"),
}
});
}
});
Vlastnost Order objektu je AttributeRouteModel nastavená na 2 . Tím se zajistí, že šablona pro (nastavená dříve v tématu na ) bude mít prioritu pro první pozici hodnoty dat trasy, když je zadaná {globalTemplate?} 1 jedna hodnota trasy. Pokud se kvůli nastavení vlastnosti vyžádá stránka O službě s parametrem trasy v , načte se hodnota RouteDataValue do ( ) a ne /About/RouteDataValue RouteData.Values["globalTemplate"] ( Order = 1 RouteData.Values["aboutTemplate"] Order = 2 Order ).
Všude, kde je to možné, nastavte Order , což má za výsledek Order = 0 . Při výběru správné trasy se spoléhejte na směrování.
Vyžádejte si stránku o ukázce na adrese a localhost:5000/About/GlobalRouteValue/AboutRouteValue prohlédněte si výsledek:

Konfigurace trasy stránky
Slouží AddPageRoute ke konfiguraci trasy na stránku v zadané cestě stránky. Vygenerované odkazy na stránku používají zadanou trasu. AddPageRoute používá AddPageRouteModelConvention k vytvoření trasy.
Ukázková aplikace vytvoří trasu pro /TheContactPage Contact.cshtml:
options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");
Stránka Kontakt je také přístupná /Contact přes výchozí trasu.
Vlastní trasa ukázkové aplikace na stránku Kontakt umožňuje volitelný text segment trasy ( {text?} ). Stránka také obsahuje tento volitelný segment ve své direktivě pro případ, že návštěvník přistupuje @page na stránku na své /Contact trase:
@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>
Všimněte si, že adresa URL vygenerovaná pro odkaz Kontakt na vykreslené stránce odráží aktualizovanou trasu:


Navštivte stránku Kontakt na běžné trase /Contact nebo na vlastní trase /TheContactPage . Pokud zadáte další segment trasy, na stránce se zobrazí segment s kódováním text HTML, který poskytnete:

Konvence akcí modelu stránek
Výchozí poskytovatel modelu stránky, který implementuje, vyvolá konvence, které jsou navržené tak, aby poskytovaly body rozšiřitelnosti pro IPageApplicationModelProvider konfiguraci modelů stránek. Tyto konvence jsou užitečné při vytváření a úpravách scénářů zjišťování a zpracování stránek.
Pro příklady v této části používá ukázková aplikace třídu , což je třída , která používá AddHeaderAttribute ResultFilterAttribute hlavičku odpovědi:
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);
}
}
Pomocí konvencí ukázka ukazuje, jak použít atribut na všechny stránky ve složce a na jednu stránku.
Konvence modelu aplikace složek
Slouží k vytvoření a přidání , která vyvolá akci na AddFolderApplicationModelConvention IPageApplicationModelConvention PageApplicationModel instancích pro všechny stránky v zadané složce.
Ukázka demonstruje použití přidáním hlavičky na stránky ve složce AddFolderApplicationModelConvention OtherPagesHeader OtherPages aplikace:
options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});
Vyžádejte si stránku Page1 ukázky na adrese a zkontrolujte localhost:5000/OtherPages/Page1 hlavičky, abyste si výsledek prohlédněte:

Konvence modelu stránkové aplikace
Slouží k vytvoření a přidání , která vyvolá akci na stránce AddPageApplicationModelConvention IPageApplicationModelConvention se PageApplicationModel zadaným názvem.
Ukázka demonstruje použití AddPageApplicationModelConvention přidáním hlavičky AboutHeader na stránku O službě:
options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"AboutHeader", new string[] { "About Header Value" }));
});
Vyžádejte si stránku o ukázce na adrese a zkontrolujte localhost:5000/About hlavičky, abyste si výsledek prohlédněte:

Konfigurace filtru
ConfigureFilter nakonfiguruje zadaný filtr na použití. Můžete implementovat třídu filtru, ale ukázková aplikace ukazuje, jak implementovat filtr ve výrazu lambda, který je implementován na pozadí jako objekt pro vytváření, který vrací filtr:
options.Conventions.ConfigureFilter(model =>
{
if (model.RelativePath.Contains("OtherPages/Page2"))
{
return new AddHeaderAttribute(
"OtherPagesPage2Header",
new string[] { "OtherPages/Page2 Header Value" });
}
return new EmptyFilter();
});
Model aplikace stránky slouží ke kontrole relativní cesty pro segmenty, které vedou na stránku Page2 ve složce OtherPages. Pokud podmínka projde, přidá se hlavička. Pokud ne, EmptyFilter použije se .
EmptyFilter je filtr akce. Vzhledem k tomu, že filtry akcí jsou stránkami ignorovány, nemá objekt žádný zamýšlený účinek, pokud Razor EmptyFilter cesta neobsahuje OtherPages/Page2 .
Vyžádejte si stránku Page2 ukázky na adrese a zkontrolujte localhost:5000/OtherPages/Page2 hlavičky, abyste si výsledek prohlédněte:

Konfigurace objekt pro vytváření filtrů
ConfigureFilter nakonfiguruje zadanou továrnu na použití filtrů na všechny Razor stránky.
Ukázková aplikace nabízí příklad použití objektu pro vytváření filtrů přidáním hlavičky se dvěma hodnotami na FilterFactoryHeader stránky aplikace:
options.Conventions.ConfigureFilter(new AddHeaderWithFactory());
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;
}
}
}
Požádejte o stránku ukázek o stránce localhost:5000/About a Prohlédněte si záhlaví a podívejte se na výsledek:

Filtry MVC a filtr stránky (IPageFilter)
Filtry akcí MVC jsou stránky ignorovány Razor , protože Razor stránky používají metody obslužné rutiny. Další typy filtrů MVC jsou k dispozici pro použití: autorizace, výjimka, prostředeka výsledek. Další informace najdete v tématu filtry .
Filtr stránky ( IPageFilter ) je filtr, který se vztahuje na Razor stránky. Další informace najdete v tématu metody filtrování pro Razor stránky.