RazorSayfalarda yönlendirme ve uygulama kuralları ASP.NET Core
Sayfa yönlendirmeyi, bulmayı ve sayfa işlemeyi kontrol etmek için sayfa yolu ve uygulama modeli sağlayıcısı kuralları kullanmayı Razor öğrenin.
Tek tek sayfalar için özel sayfa yolları yapılandırmanız gerekir, bu konunun devamlarında açıklanan AddPageRoute kuralıyla sayfalara yönlendirmeyi yapılandırabilirsiniz.
Bir sayfa yolu belirtmek, yol kesimleri eklemek veya bir yol için parametreler eklemek için sayfanın yönergesi @page kullanın. Daha fazla bilgi için bkz. Özel yollar.
Rota segmentleri veya parametre adları olarak kullanılam edilemez ayrılmış sözcükler vardır. Daha fazla bilgi için bkz. Yönlendirme: Ayrılmış yönlendirme adları.
Örnek kodu görüntüleme veya indirme ( nasılindir)
| Senaryo | Örnek, ... |
|---|---|
| Model kurallar Conventions.Add
|
Uygulamanın sayfalarına bir yol şablonu ve üst bilgi ekleyin. |
Sayfa yolu eylem kuralları
|
Bir klasördeki sayfalara ve tek sayfaya bir yol şablonu ekleyin. |
Sayfa modeli eylem kuralları
|
Klasördeki sayfalara üst bilgi ekleme, tek sayfaya üst bilgi ekleme ve uygulamanın sayfalarına üst bilgi eklemek için bir filtre fabrikası yapılandırma. |
Razor Sayfa kuralları, içinde yapılandıran bir AddRazorPages aşırı yükleme kullanılarak RazorPagesOptions Startup.ConfigureServices yapılandırılır. Aşağıdaki kural örnekleri bu konunun devamlarında açıklanmıştır:
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( ... );
});
}
Rota sırası
Yollar, işleme Order (yol eşleştirme) için bir belirtir.
| Sipariş | Davranış |
|---|---|
| -1 | Yol, diğer yollar işlenmeden önce işlenir. |
| 0 | Sipariş belirtilmedi (varsayılan değer). Atanmadı Order ( Order = null ) ayarı, işleme için yolu varsayılan olarak Order 0 (sıfır) olarak ayarlar. |
| 1, 2, … n | Rota işleme sıralamasını belirtir. |
Rota işleme kurala göre kurulur:
- Yollar sıralı olarak işlenir (-1, 0, 1, 2, … n).
- Yollar aynı olduğunda, en özel yol önce daha az
Orderbelirli yollar ile eş olur. - Aynı ve aynı sayıda parametreye sahip yollar bir istek URL'si ile eşlendiğinde yollar, 'ye
Ordereklendiklerine göre PageConventionCollection işlenir.
Mümkünse, rota işleme sırasına bağlı olarak kaçının. Yönlendirme genellikle URL eşleştirme ile doğru yolu seçer. İstekleri doğru yönlendirmek için yol özelliklerini ayarlamanız gerekirse, uygulamanın yönlendirme şeması büyük olasılıkla istemciler için kafa karıştırıcı ve bakımı Order zor olabilir. Uygulamanın yönlendirme şemasını basitleştirmeyi arama. Örnek uygulama, tek bir uygulama kullanarak çeşitli yönlendirme senaryolarını göstermek için açık bir yol işleme sırası gerektirir. Ancak, üretim uygulamalarına rota ayarlamayı Order önlemeyi denemelisiniz.
Razor Sayfa yönlendirme ve MVC denetleyicisi yönlendirmesi bir uygulama paylaşır. MVC konu başlıklarında rota sırasıyla ilgili bilgiler Denetleyici eylemlerine yönlendirme: Öznitelik yollarını sıralama altında yer almaktadır.
Model kurallar
Sayfalar için geçerli IPageConvention olan model kuralları eklemek için bir temsilci Razor ekleyin.
Tüm sayfalara rota modeli kuralı ekleme
Sayfa Conventions yolu modeli oluşturma sırasında uygulanan örnek IPageRouteModelConvention IPageConvention koleksiyonuna bir oluşturmak ve eklemek için kullanın.
Örnek uygulama, {globalTemplate?} uygulamanın tüm sayfalarına bir yol şablonu ekler:
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?}"),
}
});
}
}
}
Orderiçin özelliği AttributeRouteModel olarak 1 ayarlanır. Bu, örnek uygulamada aşağıdaki yol eşleştirme davranışını sağlar:
- için bir yol
TheContactPage/{text?}şablonu konu başlığında daha sonra eklenmiştir. Kişi Sayfası yolunun varsayılan sırasınull()Order = 0vardır, bu nedenle yol şablonuyla{globalTemplate?}eşleşmez. - Konu
{aboutTemplate?}başlığında daha sonra bir yol şablonu eklenir. Şablona{aboutTemplate?}birOrder2verilir. Özelliğin ayarı nedeniyle Hakkında sayfası için " RouteDataValue" öğesinde isten geldiğinde ( ) değil () içine/About/RouteDataValueRouteData.Values["globalTemplate"]Order = 1RouteData.Values["aboutTemplate"]Order = 2Orderyüklenir. - Konu
{otherPagesTemplate?}başlığında daha sonra bir yol şablonu eklenir. Şablona{otherPagesTemplate?}birOrder2verilir. Pages/OtherPages klasöründeki herhangi bir sayfa bir yol parametresiyle istenirken (örneğin, ), özelliği ayar nedeniyle "RouteDataValue" () değil () içine/OtherPages/Page1/RouteDataValueRouteData.Values["globalTemplate"]Order = 1RouteData.Values["otherPagesTemplate"]Order = 2Orderyüklenir.
Mümkün olduğunca, ile sonuçlandıran Order 'i ayarlamayın. Order = 0 Doğru yolu seçmek için yönlendirmeye güvenin.
Razor ekleme gibi Sayfalar, Conventions içinde hizmet koleksiyonuna Razor Startup.ConfigureServices eklenmiştir. Örneğin, örnek uygulamasına bakın.
options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
Örneğin About sayfasını sayfasından localhost:5000/About/GlobalRouteValue isteğinde bulun ve sonucu inceleyebilirsiniz:

Tüm sayfalara uygulama modeli kuralı ekleme
Sayfa Conventions uygulaması modeli oluşturma sırasında uygulanan örnek IPageApplicationModelConvention IPageConvention koleksiyonuna bir oluşturmak ve eklemek için kullanın.
Bu ve diğer kuralları konu başlığında daha sonra göstermek için, örnek uygulama bir sınıf AddHeaderAttribute içerir. Sınıf oluşturucusu bir dize name ve dize dizisi kabul values eder. Bu değerler, bir yanıt üst OnResultExecuting bilgisi ayarlamak için yönteminde kullanılır. Tam sınıf, konunun ilerleyen kısımlarında yer alan Sayfa modeli eylem kuralları bölümünde gösterilir.
Örnek uygulama, AddHeaderAttribute uygulamanın tüm sayfalarına üst GlobalHeader bilgi eklemek için sınıfını kullanır:
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());
Örneğin About sayfasını sayfasından isteğinde localhost:5000/About bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Tüm sayfalara işleyici modeli kuralı ekleme
Sayfa Conventions işleyicisi modeli IPageHandlerModelConvention oluşturma sırasında uygulanan örnek IPageConvention koleksiyonuna bir oluşturmak ve eklemek için kullanın.
public class GlobalPageHandlerModelConvention
: IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// Access the PageHandlerModel
}
}
Startup.cs:
options.Conventions.Add(new GlobalPageHandlerModelConvention());
Sayfa yolu eylem kuralları
'den türetilen varsayılan yol modeli sağlayıcısı, sayfa yollarını yapılandırmak için IPageRouteModelProvider genişletilebilirlik noktaları sağlamak üzere tasarlanmış kuralları çağırır.
Klasör yolu modeli kuralı
Belirtilen klasör altındaki tüm sayfalar için üzerinde AddFolderRouteModelConvention IPageRouteModelConvention bir eylem PageRouteModel çağıran bir oluşturmak ve eklemek için kullanın.
Örnek uygulama, AddFolderRouteModelConvention {otherPagesTemplate?} OtherPages klasöründeki sayfalara bir yol şablonu eklemek için kullanır:
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?}"),
}
});
}
});
Orderiçin özelliği AttributeRouteModel olarak 2 ayarlanır. Bu, şablonun (konu başlığında daha önce olarak ayarlanmıştır) tek bir yol değeri sağlanıyorken ilk yol veri değeri konumu için {globalTemplate?} 1 öncelik verilmesini sağlar. Pages/OtherPages klasöründeki bir sayfa bir yol parametre değeriyle (örneğin, ) istenmişse, özelliği ayar nedeniyle "RouteDataValue" () değil () içine /OtherPages/Page1/RouteDataValue RouteData.Values["globalTemplate"] Order = 1 RouteData.Values["otherPagesTemplate"] Order = 2 Order yüklenir.
Mümkün olduğunca, ile sonuçlandıran Order 'i ayarlamayın. Order = 0 Doğru yolu seçmek için yönlendirmeye güvenin.
Örneğin Sayfa1 sayfasını isteğinde localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue bulun ve sonucu inceleyebilirsiniz:

Sayfa yolu modeli kuralı
belirtilen AddPageRouteModelConvention adla sayfa IPageRouteModelConvention için üzerinde bir eylem PageRouteModel çağıran bir oluşturmak ve eklemek için kullanın.
Örnek uygulama, AddPageRouteModelConvention Hakkında sayfasına bir yol şablonu eklemek için {aboutTemplate?} kullanır:
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?}"),
}
});
}
});
Orderiçin özelliği AttributeRouteModel olarak 2 ayarlanır. Bu, şablonun (konu başlığında daha önce olarak ayarlanmıştır) tek bir yol değeri sağlanıyorken ilk yol veri değeri konumu için {globalTemplate?} 1 öncelik verilmesini sağlar. Hakkında sayfası, özelliğini ayar nedeniyle " RouteDataValue" öğesinde bir yol parametresi değeriyle istenmişse ( ) değil /About/RouteDataValue RouteData.Values["globalTemplate"] () içine Order = 1 RouteData.Values["aboutTemplate"] Order = 2 Order yüklenir.
Mümkün olduğunca, ile sonuçlandıran Order 'i ayarlamayın. Order = 0 Doğru yolu seçmek için yönlendirmeye güvenin.
Örneğin About sayfasını sayfasından localhost:5000/About/GlobalRouteValue/AboutRouteValue isteğinde bulun ve sonucu inceleyebilirsiniz:

Sayfa yollarını özelleştirmek için parametre dönüştürücü kullanma
Uygulama tarafından oluşturulan sayfa ASP.NET Core bir parametre dönüştürücü kullanılarak özelleştirilebilir. Parametre dönüştürücü, IOutboundParameterTransformer parametrelerin değerini uygulayan ve dönüştüren bir parametredir. Örneğin, özel parametre dönüştürücü SlugifyParameterTransformer yol değerini SubscriptionManagement olarak subscription-management değiştirir.
Sayfa yolu model kuralı, bir uygulama içinde otomatik olarak oluşturulan sayfa yollarının klasör ve dosya adı kesimlerine bir parametre dönüştürücü PageRouteTransformerConvention uygular. Örneğin, Razor /Pages/SubscriptionManagement/ViewAll.cshtml dosyasındaki Sayfalar dosyasının yolu olarak yeniden /SubscriptionManagement/ViewAll /subscription-management/view-all yazılır.
PageRouteTransformerConvention yalnızca Sayfalar klasöründen ve dosya adlarından gelen sayfa yolunun otomatik Razor olarak oluşturulan kesimlerini dönüştürer. yönergesi ile eklenen yol kesimlerini @page dönüştürmez. Kural ayrıca tarafından eklenen yolları AddPageRoute dönüştürmez.
PageRouteTransformerConvention, içinde bir seçenek olarak Startup.ConfigureServices kaydedilir:
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();
}
}
Uyarı
System.Text.RegularExpressionsGüvenilmeyen girişi işlemek için kullanırken bir zaman aşımı geçirin. Kötü niyetli bir Kullanıcı, RegularExpressions hizmet reddi saldırısınaneden olacak giriş sağlayabilir. Zaman aşımını geçen ASP.NET Core Framework API 'Leri RegularExpressions .
Sayfa yolu yapılandırma
Belirtilen AddPageRoute sayfa yolundaki bir sayfaya giden yolu yapılandırmak için kullanın. Sayfanın oluşturulan bağlantıları, belirttiğiniz yolu kullanır. AddPageRoute , AddPageRouteModelConvention yolu kurmak için kullanır.
Örnek uygulama, /TheContactPage Contact.cshtml için bir yolu oluşturur:
options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");
Kişi sayfasına varsayılan yolu üzerinden /Contact de ulaşabilirsiniz.
Örnek uygulamanın Kişi sayfasına giden özel yolu isteğe bağlı bir yol kesimine text ( ) izin {text?} verir. Sayfa ayrıca, ziyaretçinin kendi rotası üzerinde sayfaya erişmesi durumunda @page yönergesine bu isteğe bağlı segmenti /Contact de içerir:
@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>
İşlenen sayfada Kişi bağlantısı için oluşturulan URL'nin güncelleştirilmiş yolu yansıtdığını unutmayın:


Kişi sayfasını normal rotası olan veya özel /Contact yolu olan sayfasından ziyaret /TheContactPage edin. Ek bir yol text kesimi sağlarsanız sayfada, sağlanmış HTML kodlanmış segmenti görüntülenir:

Sayfa modeli eylem kuralları
Uygulayan varsayılan sayfa modeli sağlayıcısı, sayfa modellerini yapılandırmak için genişletilebilirlik noktaları IPageApplicationModelProvider sağlamak üzere tasarlanmış kuralları çağırır. Bu kural, sayfa bulma ve işleme senaryolarını oluşturma ve değiştirme sırasında yararlıdır.
Bu bölümdeki örnekler için örnek uygulama, yanıt üst AddHeaderAttribute bilgisi uygulanan bir sınıfı ResultFilterAttribute kullanır:
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);
}
}
Kuralları kullanarak örnek, özniteliğin bir klasördeki tüm sayfalara ve tek bir sayfaya nasıl uygulanabileceklerini gösteriyor.
Klasör uygulaması modeli kuralı
Belirtilen AddFolderApplicationModelConvention klasör altındaki tüm IPageApplicationModelConvention sayfalarda örneklerde eylem PageApplicationModel çağıran bir oluşturmak ve eklemek için kullanın.
Örnek, uygulamanın AddFolderApplicationModelConvention OtherPages klasörünün içindeki sayfalara üst OtherPagesHeader bilgi ekleyerek kullanımını gösterir:
options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});
Örneğin Sayfa1 sayfasını sayfasından localhost:5000/OtherPages/Page1 istekte bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Sayfa uygulaması modeli kuralı
belirtilen AddPageApplicationModelConvention adla sayfa IPageApplicationModelConvention için üzerinde bir eylem PageApplicationModel çağıran bir oluşturmak ve eklemek için kullanın.
Örnek, Hakkında sayfasına AddPageApplicationModelConvention bir üst bilgi ekleyerek AboutHeader kullanımını gösterir:
options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"AboutHeader", new string[] { "About Header Value" }));
});
Örneğin About sayfasını sayfasından isteğinde localhost:5000/About bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Filtre yapılandırma
ConfigureFilter belirtilen filtreyi uygulanacak şekilde yapılandırıyor. Bir filtre sınıfı uygulayabilirsiniz, ancak örnek uygulama, bir lambda ifadesinde filtrenin nasıl uygulandığını gösterir. Bu ifade, arkalarında filtre döndüren bir fabrika olarak uygulanır:
options.Conventions.ConfigureFilter(model =>
{
if (model.RelativePath.Contains("OtherPages/Page2"))
{
return new AddHeaderAttribute(
"OtherPagesPage2Header",
new string[] { "OtherPages/Page2 Header Value" });
}
return new EmptyFilter();
});
Sayfa uygulaması modeli, OtherPages klasöründeki Page2 sayfasına giden segmentlerin göreli yolunu kontrol etmek için kullanılır. Koşul başarılı olursa bir üst bilgi eklenir. Uygulanmayacaksa EmptyFilter uygulanır.
EmptyFilterbir Eylem filtresidir. Eylem filtreleri Sayfalar tarafından Razor yoksayıldıkları için, yolun EmptyFilter içermesi amaçlanan şekilde bir etkisi OtherPages/Page2 yoktur.
Örneğin Sayfa2 sayfasını sayfasından localhost:5000/OtherPages/Page2 istekte bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Filtre fabrikası yapılandırma
ConfigureFilter belirtilen fabrikayı tüm Sayfalara filtre uygulayacak şekilde Razor yapılandırıyor.
Örnek uygulama, uygulamanın sayfalarına iki değerle bir üst bilgi ekleyerek filtre fabrikası kullanma FilterFactoryHeader örneği sağlar:
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;
}
}
}
Örneğin About sayfasını sayfasından isteğinde localhost:5000/About bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

MVC Filtreleri ve Sayfa filtresi (IPageFilter)
MVC Eylem filtreleri Sayfalar tarafından yoksayılır çünkü Sayfalar Razor Razor işleyici yöntemleri kullanır. Kullanabileceğiniz diğer MVC filtresi türleri vardır: Yetkilendirme, ÖzelDurum, Kaynakve Sonuç. Daha fazla bilgi için Filtreler konu başlığına bakın.
Sayfa filtresi ( IPageFilter ), Sayfalar için geçerli olan bir Razor filtredir. Daha fazla bilgi için bkz. Sayfalar için filtreleme Razor yöntemleri.
Ek kaynaklar
Sayfa yönlendirmeyi, bulmayı ve sayfa işlemeyi kontrol etmek için sayfa yolu ve uygulama modeli sağlayıcısı kuralları kullanmayı Razor öğrenin.
Tek tek sayfalar için özel sayfa yolları yapılandırmanız gerekir, bu konunun devamlarında açıklanan AddPageRoute kuralıyla sayfalara yönlendirmeyi yapılandırabilirsiniz.
Bir sayfa yolu belirtmek, yol kesimleri eklemek veya bir yol için parametreler eklemek için sayfanın yönergesi @page kullanın. Daha fazla bilgi için bkz. Özel yollar.
Rota segmentleri veya parametre adları olarak kullanılam edilemez ayrılmış sözcükler vardır. Daha fazla bilgi için bkz. Yönlendirme: Ayrılmış yönlendirme adları.
Örnek kodu görüntüleme veya indirme ( nasılindir)
| Senaryo | Örnek, ... |
|---|---|
| Model kurallar Conventions.Add
|
Uygulamanın sayfalarına bir yol şablonu ve üst bilgi ekleyin. |
Sayfa yolu eylem kuralları
|
Bir klasördeki sayfalara ve tek sayfaya bir yol şablonu ekleyin. |
Sayfa modeli eylem kuralları
|
Klasördeki sayfalara üst bilgi ekleme, tek sayfaya üst bilgi ekleme ve uygulamanın sayfalarına üst bilgi eklemek için bir filtre fabrikası yapılandırma. |
Razor Sayfa kuralları, AddRazorPagesOptions sınıfındaki hizmet koleksiyonunda öğesine genişletme yöntemi kullanılarak eklenir ve yapılandırılır AddMvc Startup . Aşağıdaki kural örnekleri bu konunun ilerleyen kısımlarında açıklanmıştır:
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( ... );
});
}
Rota sırası
Rotalar bir Order işlem için (rota eşleştirme) belirtir.
| Sipariş | Davranış |
|---|---|
| -1 | Yol, diğer rotalar işlenmeden önce işlenir. |
| 0 | Sıra belirtilmemiş (varsayılan değer). Atama değil Order ( Order = null ), Order işleme için varsayılan yolu 0 (sıfır) olarak belirler. |
| 1, 2, … n | Yol işleme sırasını belirtir. |
Yol işleme, kurala göre belirlenir:
- Yollar sıralı sırada işlenir (-1, 0, 1, 2, … n).
- Yollar aynı olduğunda
Order, en belirli yol önce daha az özel yollarla eşleştirilir. - Aynı
Orderve aynı parametre sayısına sahip rotalar bir Istek URL 'siyle eşleşiyorsa, rotalar öğesine eklendikleri sırada işlenir PageConventionCollection .
Mümkünse, belirlenen bir yol işleme sırasına bağlı olarak kullanmaktan kaçının. Genellikle Yönlendirme, URL eşleştirme ile doğru yolu seçer. Orderİstekleri doğru yönlendirmek için yol özelliklerini ayarlamanız gerekiyorsa, uygulamanın yönlendirme şeması büyük olasılıkla istemciler için kafa karıştırıcı olur ve bakım için kırıcı olur. Uygulamanın yönlendirme şemasını basitleştirecek şekilde arama yapın. Örnek uygulama, tek bir uygulama kullanarak birkaç yönlendirme senaryosunu göstermek için açık bir yol işleme sırası gerektirir. Ancak, üretim uygulamalarında rota ayarlama uygulamalarından kaçınmaya çalışmalısınız Order .
Razor Sayfa yönlendirme ve MVC denetleyici yönlendirme bir uygulamayı paylaşır. MVC konularındaki yol sırasıyla ilgili bilgiler, Denetleyici eylemlerine yönlendirme sırasında mevcuttur: öznitelik yollarını sıralama.
Model kurallar
IPageConventionSayfasına uygulanan model kuralları eklemek için için bir temsilci ekleyin Razor .
Tüm sayfalara bir rota modeli kuralı ekleme
Conventions IPageRouteModelConvention IPageConvention Sayfa yönlendirme modeli oluşturma sırasında uygulanan örnek koleksiyonu oluşturmak ve eklemek için kullanın.
Örnek uygulama, {globalTemplate?} uygulamadaki tüm sayfalara bir rota şablonu ekler:
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?}"),
}
});
}
}
}
İçin Order özelliği AttributeRouteModel olarak ayarlanır 1 . Bu, örnek uygulamada aşağıdaki yol eşleştirme davranışını sağlar:
- İçin bir yol şablonu
TheContactPage/{text?}, konusuna daha sonra eklenir. Iletişim sayfası yolu, () varsayılan sırasına sahiptirnullOrder = 0, bu nedenle{globalTemplate?}yol şablonundan önce eşleşir. {aboutTemplate?}Konuya daha sonra bir yol şablonu eklenir.{aboutTemplate?}Şablonuna bir verilebilirOrder2. Hakkında sayfası istendiğinde/About/RouteDataValue,RouteData.Values["globalTemplate"]Order = 1RouteData.Values["aboutTemplate"]Order = 2özelliğin ayarlanması nedeniyleOrder"routedatavalue", () içine () yüklenir.{otherPagesTemplate?}Konuya daha sonra bir yol şablonu eklenir.{otherPagesTemplate?}Şablonuna bir verilebilirOrder2. Sayfalar/otherpages klasöründeki herhangi bir sayfa bir yol parametresi ile istendiğinde (örneğin,/OtherPages/Page1/RouteDataValue), özelliğin ayarlanması nedeniyle "routedatavalue"RouteData.Values["globalTemplate"]()Order = 1ve NotRouteData.Values["otherPagesTemplate"]() öğesine yüklenirOrder = 2Order.
Mümkün olan yerlerde, Order ' yi ayarlayın Order = 0 . Doğru yolu seçmek için yönlendirmeyi güvenin.
RazorConventionsİçindeki hizmet KOLEKSIYONUNA MVC eklendiğinde ekleme gibi sayfa seçenekleri eklenir Startup.ConfigureServices . Örnek için bkz. örnek uygulama.
options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About/GlobalRouteValue ve sonucu inceleyin:

Tüm sayfalara uygulama modeli kuralı ekleme
ConventionsOluşturma ve IPageApplicationModelConvention IPageConvention sayfa uygulama modeli oluşturma sırasında uygulanan örnek koleksiyonuna eklemek için kullanın.
Bu ve diğer kuralları konunun ilerleyen kısımlarında göstermek için, örnek uygulama bir AddHeaderAttribute sınıfı içerir. Sınıf Oluşturucusu bir name dize ve bir values dize dizisi kabul eder. Bu değerler, OnResultExecuting bir yanıt üst bilgisi ayarlamak için yönteminde kullanılır. Tam sınıf, konusunun ilerleyen kısımlarında sayfa modeli eylem kuralları bölümünde gösterilir.
Örnek uygulama, AddHeaderAttribute GlobalHeader uygulama içindeki tüm sayfalara üst bilgi eklemek için sınıfını kullanır:
public class GlobalHeaderPageApplicationModelConvention
: IPageApplicationModelConvention
{
public void Apply(PageApplicationModel model)
{
model.Filters.Add(new AddHeaderAttribute(
"GlobalHeader", new string[] { "Global Header Value" }));
}
}
Başlangıç. cs:
options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About ve sonucu görüntülemek için üst bilgileri inceleyin:

Tüm sayfalara bir işleyici modeli kuralı ekleme
Conventions IPageHandlerModelConvention IPageConvention Sayfa işleyici modelinin oluşturulması sırasında uygulanan örnek koleksiyonu oluşturmak ve eklemek için kullanın.
public class GlobalPageHandlerModelConvention
: IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// Access the PageHandlerModel
}
}
Başlangıç. cs:
options.Conventions.Add(new GlobalPageHandlerModelConvention());
Sayfa yolu eylem kuralları
IPageRouteModelProviderSayfa yollarının yapılandırılması için genişletilebilirlik noktaları sağlamak üzere tasarlanan, çağıran kurallarından türetilen varsayılan yol modeli sağlayıcısı.
Klasör Yönlendirme modeli kuralı
AddFolderRouteModelConvention IPageRouteModelConvention PageRouteModel Belirtilen klasörün altındaki tüm sayfalar için üzerinde bir eylem çağıran bir eylem oluşturmak ve eklemek için kullanın.
Örnek uygulama, AddFolderRouteModelConvention {otherPagesTemplate?} diğer sayfalar klasöründeki sayfalara bir yol şablonu eklemek için kullanır:
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?}"),
}
});
}
});
İçin Order özelliği AttributeRouteModel olarak ayarlanır 2 . Bu, {globalTemplate?} tek bir rota değeri sağlandığında, (konusunda daha önce, konusunda daha önce olan 1 ) şablonun ilk yol veri değeri konumu için öncelik verilmesini sağlar. Sayfalar/otherpages klasöründeki bir sayfa bir rota parametresi değeriyle isteniyorsa (örneğin, /OtherPages/Page1/RouteDataValue ), özelliğin ayarlanması nedeniyle "routedatavalue" RouteData.Values["globalTemplate"] () Order = 1 ve Not RouteData.Values["otherPagesTemplate"] () içine yüklenir Order = 2 Order .
Mümkün olan yerlerde, Order ' yi ayarlayın Order = 0 . Doğru yolu seçmek için yönlendirmeyi güvenin.
Örnekteki Sayfa1 sayfasını isteyin localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue ve sonucu inceleyin:

Sayfa yönlendirme modeli kuralı
AddPageRouteModelConvention IPageRouteModelConvention PageRouteModel Sayfa için belirtilen ada sahip bir eylemi çağıran bir eylem oluşturmak ve eklemek için kullanın.
Örnek uygulama, AddPageRouteModelConvention {aboutTemplate?} hakkında sayfasına bir yol şablonu eklemek için kullanır:
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?}"),
}
});
}
});
İçin Order özelliği AttributeRouteModel olarak ayarlanır 2 . Bu, {globalTemplate?} tek bir rota değeri sağlandığında, (konusunda daha önce, konusunda daha önce olan 1 ) şablonun ilk yol veri değeri konumu için öncelik verilmesini sağlar. Hakkında sayfasında bir yol parametresi değeri varsa /About/RouteDataValue , RouteData.Values["globalTemplate"] Order = 1 RouteData.Values["aboutTemplate"] Order = 2 özelliğin ayarlanması nedeniyle Order "routedatavalue" () içine () yüklenir.
Mümkün olan yerlerde, Order ' yi ayarlayın Order = 0 . Doğru yolu seçmek için yönlendirmeyi güvenin.
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About/GlobalRouteValue/AboutRouteValue ve sonucu inceleyin:

Sayfa yollarını özelleştirmek için bir parametre transformatörü kullanın
ASP.NET Core tarafından oluşturulan sayfa yolları, bir parametre transformatörü kullanılarak özelleştirilebilir. Bir parametre transformatörü IOutboundParameterTransformer , parametrelerinin değerini uygular ve dönüştürür. Örneğin, özel bir SlugifyParameterTransformer parametre transformatörü SubscriptionManagement Rota değerini olarak değiştirir subscription-management .
PageRouteTransformerConventionSayfa yolu modeli kuralı, bir uygulamadaki otomatik olarak oluşturulan sayfa yollarının klasör ve dosya adı kesimlerine bir parametre transformatörü uygular. Örneğin, Razor /Pages/subscriptionmanagement/viewAll.exe konumundaki sayfa dosyası, yolu ' den ' e yeniden yazıldı /SubscriptionManagement/ViewAll /subscription-management/view-all .
PageRouteTransformerConvention yalnızca Razor sayfalar klasöründen ve dosya adından gelen bir sayfa yolunun otomatik olarak oluşturulan segmentlerini dönüştürür. Yönergeyle eklenen yol parçalarını dönüştürmez @page . Kural, tarafından eklenen yolları da dönüştürmez AddPageRoute .
, PageRouteTransformerConvention İçinde bir seçenek olarak kaydedilir 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();
}
}
Sayfa yolu yapılandırma
AddPageRouteBelirtilen sayfa yolundaki sayfaya bir yol yapılandırmak için kullanın. Sayfa için oluşturulan bağlantılar belirtilen rotayı kullanır. AddPageRoute``AddPageRouteModelConventionyolu oluşturmak için kullanır.
Örnek uygulama, /TheContactPage Contact. cshtml için bir yol oluşturur:
options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");
Iletişim sayfasına, /Contact varsayılan yolu üzerinden de erişilebilir.
Örnek uygulamanın Kişi sayfasına giden özel yolu isteğe bağlı bir yol kesimine text ( ) izin {text?} verir. Sayfa ayrıca, ziyaretçinin kendi rotası üzerinde sayfaya erişmesi durumunda @page yönergesine bu isteğe bağlı segmenti /Contact de içerir:
@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>
İşlenen sayfada Kişi bağlantısı için oluşturulan URL'nin güncelleştirilmiş yolu yansıtdığını unutmayın:


Kişi sayfasını normal rotası olan veya özel /Contact yolu olan sayfasından ziyaret /TheContactPage edin. Ek bir yol text kesimi sağlarsanız sayfada, sağlanmış HTML kodlanmış segmenti görüntülenir:

Sayfa modeli eylem kuralları
Uygulayan varsayılan sayfa modeli sağlayıcısı, sayfa modellerini yapılandırmak için genişletilebilirlik noktaları IPageApplicationModelProvider sağlamak üzere tasarlanmış kuralları çağırır. Bu kural, sayfa bulma ve işleme senaryolarını oluşturma ve değiştirme sırasında yararlıdır.
Bu bölümdeki örnekler için örnek uygulama, yanıt üst AddHeaderAttribute bilgisi uygulanan bir sınıfı ResultFilterAttribute kullanır:
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);
}
}
Kuralları kullanarak örnek, özniteliğin bir klasördeki tüm sayfalara ve tek bir sayfaya nasıl uygulanabileceklerini gösteriyor.
Klasör uygulaması modeli kuralı
Belirtilen AddFolderApplicationModelConvention klasör altındaki tüm IPageApplicationModelConvention sayfalarda örneklerde eylem PageApplicationModel çağıran bir oluşturmak ve eklemek için kullanın.
Örnek, uygulamanın AddFolderApplicationModelConvention OtherPages klasörünün içindeki sayfalara üst OtherPagesHeader bilgi ekleyerek kullanımını gösterir:
options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});
Örneğin Sayfa1 sayfasını sayfasından localhost:5000/OtherPages/Page1 istekte bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Sayfa uygulaması modeli kuralı
belirtilen AddPageApplicationModelConvention adla sayfa IPageApplicationModelConvention için üzerinde bir eylem PageApplicationModel çağıran bir oluşturmak ve eklemek için kullanın.
Örnek, Hakkında sayfasına AddPageApplicationModelConvention bir üst bilgi ekleyerek AboutHeader kullanımını gösterir:
options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"AboutHeader", new string[] { "About Header Value" }));
});
Örneğin About sayfasını sayfasından isteğinde localhost:5000/About bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Filtre yapılandırma
ConfigureFilter belirtilen filtreyi uygulanacak şekilde yapılandırıyor. Bir filtre sınıfı uygulayabilirsiniz, ancak örnek uygulama, bir lambda ifadesinde filtrenin nasıl uygulandığını gösterir. Bu ifade, arkalarında filtre döndüren bir fabrika olarak uygulanır:
options.Conventions.ConfigureFilter(model =>
{
if (model.RelativePath.Contains("OtherPages/Page2"))
{
return new AddHeaderAttribute(
"OtherPagesPage2Header",
new string[] { "OtherPages/Page2 Header Value" });
}
return new EmptyFilter();
});
Sayfa uygulaması modeli, OtherPages klasöründeki Page2 sayfasına giden segmentlerin göreli yolunu kontrol etmek için kullanılır. Koşul başarılı olursa bir üst bilgi eklenir. Uygulanmayacaksa EmptyFilter uygulanır.
EmptyFilterbir Eylem filtresidir. Eylem filtreleri Sayfalar tarafından Razor yoksayıldıkları için, yolun EmptyFilter içermesi amaçlanan şekilde bir etkisi OtherPages/Page2 yoktur.
Örneğin Sayfa2 sayfasını sayfasından localhost:5000/OtherPages/Page2 istekte bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

Filtre fabrikası yapılandırma
ConfigureFilter belirtilen fabrikayı tüm Sayfalara filtre uygulayacak şekilde Razor yapılandırıyor.
Örnek uygulama, uygulamanın sayfalarına iki değerle bir üst bilgi ekleyerek filtre fabrikası kullanma FilterFactoryHeader örneği sağlar:
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;
}
}
}
Örneğin About sayfasını sayfasından isteğinde localhost:5000/About bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

MVC Filtreleri ve Sayfa filtresi (IPageFilter)
MVC Eylem filtreleri Sayfalar tarafından yoksayılır çünkü Sayfalar Razor Razor işleyici yöntemleri kullanır. Kullanabileceğiniz diğer MVC filtresi türleri vardır: Yetkilendirme, ÖzelDurum, Kaynakve Sonuç. Daha fazla bilgi için Filtreler konu başlığına bakın.
Sayfa filtresi ( IPageFilter ), Sayfalar için geçerli olan bir Razor filtredir. Daha fazla bilgi için bkz. Sayfalar için filtreleme Razor yöntemleri.
Ek kaynaklar
Sayfa yönlendirmeyi, bulmayı ve sayfa işlemeyi kontrol etmek için sayfa yolu ve uygulama modeli sağlayıcısı kuralları kullanmayı Razor öğrenin.
Tek tek sayfalar için özel sayfa yolları yapılandırmanız gerekir, bu konunun devamlarında açıklanan AddPageRoute kuralıyla sayfalara yönlendirmeyi yapılandırabilirsiniz.
Bir sayfa yolu belirtmek, yol kesimleri eklemek veya bir yol için parametreler eklemek için sayfanın yönergesi @page kullanın. Daha fazla bilgi için bkz. Özel yollar.
Rota segmentleri veya parametre adları olarak kullanılam edilemez ayrılmış sözcükler vardır. Daha fazla bilgi için bkz. Yönlendirme: Ayrılmış yönlendirme adları.
Örnek kodu görüntüleme veya indirme ( nasılindir)
| Senaryo | Örnek, ... |
|---|---|
| Model kurallar Conventions.Add
|
Uygulamanın sayfalarına bir yol şablonu ve üst bilgi ekleyin. |
Sayfa yolu eylem kuralları
|
Bir klasördeki sayfalara ve tek sayfaya bir yol şablonu ekleyin. |
Sayfa modeli eylem kuralları
|
Klasördeki sayfalara üst bilgi ekleme, tek sayfaya üst bilgi ekleme ve uygulamanın sayfalarına üst bilgi eklemek için bir filtre fabrikası yapılandırma. |
Razor Sayfa kuralları, sınıfındaki hizmet AddRazorPagesOptions koleksiyonunda uzantısı yöntemi AddMvc kullanılarak eklenir ve Startup yapılandırılır. Aşağıdaki kural örnekleri bu konunun devamlarında açıklanmıştır:
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( ... );
});
}
Rota sırası
Yollar, işleme Order (yol eşleştirme) için bir belirtir.
| Sipariş | Davranış |
|---|---|
| -1 | Yol, diğer yollar işlenmeden önce işlenir. |
| 0 | Sipariş belirtilmedi (varsayılan değer). Atanmadı Order ( Order = null ) ayarı, işleme için yolu varsayılan olarak Order 0 (sıfır) olarak ayarlar. |
| 1, 2, … n | Rota işleme sıralamasını belirtir. |
Rota işleme kurala göre kurulur:
- Yollar sıralı olarak işlenir (-1, 0, 1, 2, … n).
- Yollar aynı olduğunda, en özel yol önce daha az
Orderbelirli yollar ile eş olur. - Aynı ve aynı sayıda parametreye sahip yollar bir istek URL'si ile eşlendiğinde yollar, 'ye
Ordereklendiklerine göre PageConventionCollection işlenir.
Mümkünse, rota işleme sırasına bağlı olarak kaçının. Yönlendirme genellikle URL eşleştirme ile doğru yolu seçer. İstekleri doğru yönlendirmek için yol özelliklerini ayarlamanız gerekirse, uygulamanın yönlendirme şeması büyük olasılıkla istemciler için kafa karıştırıcı ve bakımı Order zor olabilir. Uygulamanın yönlendirme şemasını basitleştirmeyi arama. Örnek uygulama, tek bir uygulama kullanarak çeşitli yönlendirme senaryolarını göstermek için açık bir yol işleme sırası gerektirir. Ancak, üretim uygulamalarına rota ayarlamayı Order önlemeyi denemelisiniz.
Razor Sayfa yönlendirme ve MVC denetleyicisi yönlendirmesi bir uygulama paylaşır. MVC konu başlıklarında rota sırasıyla ilgili bilgiler Denetleyici eylemlerine yönlendirme: Öznitelik yollarını sıralama altında yer almaktadır.
Model kurallar
Sayfalar için geçerli IPageConvention olan model kuralları eklemek için bir temsilci Razor ekleyin.
Tüm sayfalara rota modeli kuralı ekleme
Conventions IPageRouteModelConvention IPageConvention Sayfa yönlendirme modeli oluşturma sırasında uygulanan örnek koleksiyonu oluşturmak ve eklemek için kullanın.
Örnek uygulama, {globalTemplate?} uygulamadaki tüm sayfalara bir rota şablonu ekler:
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?}"),
}
});
}
}
}
İçin Order özelliği AttributeRouteModel olarak ayarlanır 1 . Bu, örnek uygulamada aşağıdaki yol eşleştirme davranışını sağlar:
- İçin bir yol şablonu
TheContactPage/{text?}, konusuna daha sonra eklenir. Iletişim sayfası yolu, () varsayılan sırasına sahiptirnullOrder = 0, bu nedenle{globalTemplate?}yol şablonundan önce eşleşir. {aboutTemplate?}Konuya daha sonra bir yol şablonu eklenir.{aboutTemplate?}Şablonuna bir verilebilirOrder2. Hakkında sayfası istendiğinde/About/RouteDataValue,RouteData.Values["globalTemplate"]Order = 1RouteData.Values["aboutTemplate"]Order = 2özelliğin ayarlanması nedeniyleOrder"routedatavalue", () içine () yüklenir.{otherPagesTemplate?}Konuya daha sonra bir yol şablonu eklenir.{otherPagesTemplate?}Şablonuna bir verilebilirOrder2. Sayfalar/otherpages klasöründeki herhangi bir sayfa bir yol parametresi ile istendiğinde (örneğin,/OtherPages/Page1/RouteDataValue), özelliğin ayarlanması nedeniyle "routedatavalue"RouteData.Values["globalTemplate"]()Order = 1ve NotRouteData.Values["otherPagesTemplate"]() öğesine yüklenirOrder = 2Order.
Mümkün olan yerlerde, Order ' yi ayarlayın Order = 0 . Doğru yolu seçmek için yönlendirmeyi güvenin.
RazorConventionsİçindeki hizmet KOLEKSIYONUNA MVC eklendiğinde ekleme gibi sayfa seçenekleri eklenir Startup.ConfigureServices . Örnek için bkz. örnek uygulama.
options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About/GlobalRouteValue ve sonucu inceleyin:

Tüm sayfalara uygulama modeli kuralı ekleme
ConventionsOluşturma ve IPageApplicationModelConvention IPageConvention sayfa uygulama modeli oluşturma sırasında uygulanan örnek koleksiyonuna eklemek için kullanın.
Bu ve diğer kuralları konunun ilerleyen kısımlarında göstermek için, örnek uygulama bir AddHeaderAttribute sınıfı içerir. Sınıf Oluşturucusu bir name dize ve bir values dize dizisi kabul eder. Bu değerler, OnResultExecuting bir yanıt üst bilgisi ayarlamak için yönteminde kullanılır. Tam sınıf, konusunun ilerleyen kısımlarında sayfa modeli eylem kuralları bölümünde gösterilir.
Örnek uygulama, AddHeaderAttribute GlobalHeader uygulama içindeki tüm sayfalara üst bilgi eklemek için sınıfını kullanır:
public class GlobalHeaderPageApplicationModelConvention
: IPageApplicationModelConvention
{
public void Apply(PageApplicationModel model)
{
model.Filters.Add(new AddHeaderAttribute(
"GlobalHeader", new string[] { "Global Header Value" }));
}
}
Başlangıç. cs:
options.Conventions.Add(new GlobalHeaderPageApplicationModelConvention());
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About ve sonucu görüntülemek için üst bilgileri inceleyin:

Tüm sayfalara bir işleyici modeli kuralı ekleme
Conventions IPageHandlerModelConvention IPageConvention Sayfa işleyici modelinin oluşturulması sırasında uygulanan örnek koleksiyonu oluşturmak ve eklemek için kullanın.
public class GlobalPageHandlerModelConvention
: IPageHandlerModelConvention
{
public void Apply(PageHandlerModel model)
{
// Access the PageHandlerModel
}
}
Başlangıç. cs:
options.Conventions.Add(new GlobalPageHandlerModelConvention());
Sayfa yolu eylem kuralları
IPageRouteModelProviderSayfa yollarının yapılandırılması için genişletilebilirlik noktaları sağlamak üzere tasarlanan, çağıran kurallarından türetilen varsayılan yol modeli sağlayıcısı.
Klasör Yönlendirme modeli kuralı
AddFolderRouteModelConvention IPageRouteModelConvention PageRouteModel Belirtilen klasörün altındaki tüm sayfalar için üzerinde bir eylem çağıran bir eylem oluşturmak ve eklemek için kullanın.
Örnek uygulama, AddFolderRouteModelConvention {otherPagesTemplate?} diğer sayfalar klasöründeki sayfalara bir yol şablonu eklemek için kullanır:
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?}"),
}
});
}
});
İçin Order özelliği AttributeRouteModel olarak ayarlanır 2 . Bu, {globalTemplate?} tek bir rota değeri sağlandığında, (konusunda daha önce, konusunda daha önce olan 1 ) şablonun ilk yol veri değeri konumu için öncelik verilmesini sağlar. Sayfalar/otherpages klasöründeki bir sayfa bir rota parametresi değeriyle isteniyorsa (örneğin, /OtherPages/Page1/RouteDataValue ), özelliğin ayarlanması nedeniyle "routedatavalue" RouteData.Values["globalTemplate"] () Order = 1 ve Not RouteData.Values["otherPagesTemplate"] () içine yüklenir Order = 2 Order .
Mümkün olan yerlerde, Order ' yi ayarlayın Order = 0 . Doğru yolu seçmek için yönlendirmeyi güvenin.
Örnekteki Sayfa1 sayfasını isteyin localhost:5000/OtherPages/Page1/GlobalRouteValue/OtherPagesRouteValue ve sonucu inceleyin:

Sayfa yönlendirme modeli kuralı
AddPageRouteModelConvention IPageRouteModelConvention PageRouteModel Sayfa için belirtilen ada sahip bir eylemi çağıran bir eylem oluşturmak ve eklemek için kullanın.
Örnek uygulama, AddPageRouteModelConvention {aboutTemplate?} hakkında sayfasına bir yol şablonu eklemek için kullanır:
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?}"),
}
});
}
});
İçin Order özelliği AttributeRouteModel olarak ayarlanır 2 . Bu, {globalTemplate?} tek bir rota değeri sağlandığında, (konusunda daha önce, konusunda daha önce olan 1 ) şablonun ilk yol veri değeri konumu için öncelik verilmesini sağlar. Hakkında sayfasında bir yol parametresi değeri varsa /About/RouteDataValue , RouteData.Values["globalTemplate"] Order = 1 RouteData.Values["aboutTemplate"] Order = 2 özelliğin ayarlanması nedeniyle Order "routedatavalue" () içine () yüklenir.
Mümkün olan yerlerde, Order ' yi ayarlayın Order = 0 . Doğru yolu seçmek için yönlendirmeyi güvenin.
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About/GlobalRouteValue/AboutRouteValue ve sonucu inceleyin:

Sayfa yolu yapılandırma
AddPageRouteBelirtilen sayfa yolundaki sayfaya bir yol yapılandırmak için kullanın. Sayfa için oluşturulan bağlantılar belirtilen rotayı kullanır. AddPageRoute``AddPageRouteModelConventionyolu oluşturmak için kullanır.
Örnek uygulama, /TheContactPage Contact. cshtml için bir yol oluşturur:
options.Conventions.AddPageRoute("/Contact", "TheContactPage/{text?}");
Iletişim sayfasına, /Contact varsayılan yolu üzerinden de erişilebilir.
Örnek uygulamanın kişi sayfasına özel yolu, isteğe bağlı bir text yol segmentine () izin verir {text?} . Bu sayfa, @page ziyaretçinin yolunda sayfaya erişmesi durumunda bu isteğe bağlı segmenti de içerir /Contact :
@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>
İşlenmiş sayfadaki kişi bağlantısı IÇIN oluşturulan URL 'nin güncelleştirilmiş yolu yansıttığını unutmayın:


Kendi normal rotasında, veya özel rotada kişi sayfasını ziyaret edin /Contact /TheContactPage . Ek bir text Rota kesimi sağlarsanız, sayfada SAĞLADıĞıNıZ HTML kodlu segment görüntülenir:

Sayfa modeli eylem kuralları
Uygulayan varsayılan sayfa modeli sağlayıcısı, IPageApplicationModelProvider sayfa modellerini yapılandırmak için genişletilebilirlik noktaları sağlamak üzere tasarlanan kuralları çağırır. Bu kurallar sayfa bulma ve işleme senaryolarını oluştururken ve değiştirirken yararlıdır.
Bu bölümdeki örneklerde, örnek uygulama AddHeaderAttribute bir ResultFilterAttribute yanıt üst bilgisi uygulayan olan bir sınıfı kullanır:
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);
}
}
Kurallar kullanılarak, örnek bir klasördeki tüm sayfalara ve tek bir sayfaya özniteliğin nasıl uygulanacağını gösterir.
Klasör uygulama modeli kuralı
AddFolderApplicationModelConvention IPageApplicationModelConvention PageApplicationModel Belirtilen klasör altındaki tüm sayfalar için örneklere bir eylem çağıran bir eylem oluşturmak ve eklemek için kullanın.
Örnek, uygulamasının, AddFolderApplicationModelConvention OtherPagesHeader uygulamanın diğer sayfalar klasörünün içindeki sayfalara bir başlık ekleyerek kullanımını gösterir:
options.Conventions.AddFolderApplicationModelConvention("/OtherPages", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"OtherPagesHeader", new string[] { "OtherPages Header Value" }));
});
Örnekteki Sayfa1 sayfasını isteyin localhost:5000/OtherPages/Page1 ve sonucu görüntülemek için üst bilgileri inceleyin:

Sayfa uygulama modeli kuralı
AddPageApplicationModelConvention IPageApplicationModelConvention PageApplicationModel Sayfa için belirtilen ada sahip bir eylemi çağıran bir eylem oluşturmak ve eklemek için kullanın.
Örnek, AddPageApplicationModelConvention hakkında sayfasına bir başlık ekleyerek öğesinin kullanımını gösterir AboutHeader :
options.Conventions.AddPageApplicationModelConvention("/About", model =>
{
model.Filters.Add(new AddHeaderAttribute(
"AboutHeader", new string[] { "About Header Value" }));
});
Örnekteki hakkında daha fazla bilgi isteyin localhost:5000/About ve sonucu görüntülemek için üst bilgileri inceleyin:

Filtre yapılandırma
ConfigureFilter Belirtilen filtreyi uygulamak için yapılandırır. Bir filtre sınıfı uygulayabilirsiniz, ancak örnek uygulama bir lambda ifadesinde bir filtrenin nasıl uygulanacağını gösterir, bu da bir filtre döndüren bir fabrika olarak arka planda uygulandı:
options.Conventions.ConfigureFilter(model =>
{
if (model.RelativePath.Contains("OtherPages/Page2"))
{
return new AddHeaderAttribute(
"OtherPagesPage2Header",
new string[] { "OtherPages/Page2 Header Value" });
}
return new EmptyFilter();
});
Sayfa uygulama modeli, diğer sayfalar klasöründeki Page2 sayfasına yol açan parçaların göreli yolunu denetlemek için kullanılır. Koşul geçerse, bir üst bilgi eklenir. Aksi takdirde, EmptyFilter uygulanır.
EmptyFilter bir eylem filtresidir. Eylem filtreleri sayfalar tarafından yoksayıldığından, Razor EmptyFilter yol içermiyorsa hiçbir etkisi yoktur OtherPages/Page2 .
Örnek Page2 sayfasını isteyin localhost:5000/OtherPages/Page2 ve sonucu görüntülemek için üst bilgileri inceleyin:

Filtre fabrikası yapılandırma
ConfigureFilter tüm sayfalara filtre uygulamak için belirtilen fabrikası yapılandırır Razor .
Örnek uygulama, uygulamanın sayfalarına iki değerli bir başlık ekleyerek bir filtre fabrikası kullanmanın bir örneğini sağlar FilterFactoryHeader :
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;
}
}
}
Örneğin About sayfasını sayfasından isteğinde localhost:5000/About bulun ve sonucu görüntülemek için üst bilgileri inceleyebilirsiniz:

MVC Filtreleri ve Sayfa filtresi (IPageFilter)
MVC Eylem filtreleri Sayfalar tarafından yoksayılır çünkü Sayfalar Razor Razor işleyici yöntemleri kullanır. Kullanabileceğiniz diğer MVC filtresi türleri vardır: Yetkilendirme, ÖzelDurum, Kaynakve Sonuç. Daha fazla bilgi için Filtreler konu başlığına bakın.
Sayfa filtresi ( IPageFilter ), Sayfalar için geçerli olan bir Razor filtredir. Daha fazla bilgi için bkz. Sayfalar için filtreleme Razor yöntemleri.