如何在.NET Core 3.1中配置Razor页面路由为do_stuff
解决Razor页面自定义路由问题
你之前用MapControllerRoute配置路由是错误的,这个方法是给MVC控制器用的,不适用于Razor页面,所以配置无效。以下是几种可行的解决方案:
方案1:直接在页面中指定路由(最简单)
在你的Razor页面文件(比如DoStuff.cshtml)顶部,修改@page指令,直接定义访问路径:
@page "/do_stuff" @model DoStuffModel <!-- 页面内容 -->
配置完成后,访问mydomain/do_stuff即可直接打开该页面。
方案2:全局配置路由约定
如果不想修改页面文件,可以在Startup.cs中通过路由约定统一配置:
- 在
ConfigureServices方法中添加路由规则:
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorPagesOptions(options => { // 参数1:Pages文件夹下的页面相对路径(比如"/DoStuff") // 参数2:自定义的访问路由 options.Conventions.AddPageRoute("/DoStuff", "/do_stuff"); }); }
- 确保
Configure方法中启用Razor页面路由(不要用MapControllerRoute):
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件(如异常处理、静态文件等)配置... app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); // 启用Razor页面路由 }); }
方案3:重命名页面文件(如果允许)
如果当前页面文件名是DoStuffModel.cshtml(导致默认路由为/do_stuffModel),直接将文件重命名为DoStuff.cshtml。Razor页面默认路由会将文件名转为小写,这样无需额外配置就能通过mydomain/do_stuff访问。
注意:Razor页面的PageModel类名需和页面文件名匹配,比如
DoStuff.cshtml对应DoStuffModel : PageModel,这是默认路由生效的前提。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

