将生成目标链接的 url 助手将使用为路由生成的元数据。对于 razor 页面,这使用确切的文件路径来标识路由。
从 ASP.NET Core 2.1 开始,您可能能够像使用Route
属性的 MVC 路由一样调整路由。至少计划在 2.1 版本中发布。
在那之前,您必须在ConfigureServices
方法中为您的页面配置特定的路由:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/ContactUs", "contact-us");
});
这将使现有路由保持可用,因此如果您不希望这样做,则需要替换此页面的路由选择器。没有内置的方法可以做到这一点,但是当你知道该怎么做时,做到这一点并不难。
为了避免代码重复并使一切变得更好,我们将创建一个ReplacePageRoute
扩展方法,它基本上与AddPageRoute
上面的用法相匹配:
services.AddMvc()
.AddRazorPagesOptions(options => {
options.Conventions.ReplacePageRoute("/Contact", "contact-us");
});
该方法的实现直接受到以下启发AddPageRoute
:
public static PageConventionCollection ReplacePageRoute(this PageConventionCollection conventions, string pageName, string route)
{
if (conventions == null)
throw new ArgumentNullException(nameof(conventions));
if (string.IsNullOrEmpty(pageName))
throw new ArgumentNullException(nameof(pageName));
if (route == null)
throw new ArgumentNullException(nameof(route));
conventions.AddPageRouteModelConvention(pageName, model =>
{
// clear all existing selectors
model.Selectors.Clear();
// add a single selector for the new route
model.Selectors.Add(new SelectorModel
{
AttributeRouteModel = new AttributeRouteModel
{
Template = route,
}
});
});
return conventions;
}