如何为ASP.NET Core 2中所有Razor页面添加.html URL后缀?
如何给ASP.NET Core 2.0 Razor页面添加.html后缀?
我来帮你搞定这个需求——要让所有Razor页面的URL带上.html后缀,核心是修改Razor页面的路由约定,具体步骤如下:
1. 配置全局Razor页面路由模板
打开项目的Startup.cs文件,找到ConfigureServices方法,在AddMvc()的配置中添加RazorPagesOptions的约定设置,给所有页面的路由模板追加.html后缀:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .AddRazorPagesOptions(options => { // 给所有页面的路由添加.html后缀 options.Conventions.AddFolderRouteModelConvention("/", model => { foreach (var selector in model.Selectors) { var originalTemplate = selector.AttributeRouteModel.Template; // 给原路由模板加上.html后缀 selector.AttributeRouteModel.Template = originalTemplate + ".html"; } }); }); }
这段代码会遍历所有Razor页面的路由规则,自动给每个页面的URL模板加上.html后缀。比如原来的/test就会变成/test.html。
2. (可选)兼容不带后缀的访问(重定向到带后缀URL)
如果希望用户访问不带后缀的URL时,自动跳转到带.html的版本,可以在Configure方法中添加URL重写规则:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 其他中间件配置(比如UseStaticFiles、UseMvc等)之前添加重写规则 app.UseRewriter(new RewriteOptions() // 匹配不带后缀的URL,重定向到带.html的版本 .AddRewrite(@"^([^\.]+)$", "$1.html", skipRemainingRules: true)); app.UseMvc(); }
这样用户访问http://localhost/test时,会自动跳转到http://localhost/test.html,既满足你的URL显示需求,又不会影响用户的旧链接访问。
3. 验证效果
启动项目后:
- 访问
http://localhost/test.html应该能正常打开/Pages/test.cshtml页面 - 如果配置了重写规则,访问
http://localhost/test会自动跳转到带后缀的URL
另外,页面内的TagHelper链接(比如<a asp-page="test">测试页面</a>)会自动生成带.html的URL,不需要手动修改。
内容的提问来源于stack exchange,提问作者alik
相关产品推荐
相关产品推荐

