ASP.NET Core 3.0 路由不正确

ASP.NET Core 3.0 not routing correctly

我最近将现有的 ASP.NET Core 2.2 网络应用程序升级到 3.0.现在一切都可以编译。但是,当我转到 运行 应用程序时,我看到的是目录列表而不是登录页面。

我们的应用程序使用 Razor 页面而不是完整的 MVC。阅读 ASP.NET Core 3.0 中的许多变化,我可以看到实现路由的方式发生了很大变化。

之前在 ConfigureServices 中我们有以下内容。

services.AddMvc()
                .AddRazorPagesOptions(options => { options.Conventions.AuthorizeFolder("/"); });

Configure 方法中我们有这个。

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

一切正常。现在我们已经升级到 ASP.NET Core 3.0.

需要进行哪些更改才能使应用程序正确路由

您必须在默认路由上定义默认 controller。例如:

app.UseMvc(routes =>
           {
               routes.MapRoute(
                   name: "default",
                   template: "{controller=Home}/{action=Index}/{id?}");
           });

我不确定你的默认控制器是否应该是 Home 但在 template 上定义它,当用户使用空路由访问应用程序时它会工作。

在 .Net Core 3 和 .Net Core 3.1 中你必须删除 services.AddMvc().AddRazorPagesOptions(options => { options.Conventions.AuthorizeFolder("/"); });services.AddMvc(); 来自 ConfigureServices:

然后添加services.AddRazorPages();

Configure中添加:

app.UseRouting();

app.UseEndpoints(endpoints => endpoints.MapRazorPages());

app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); });

最后你的代码将是这样的:

  public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
            {
                services.AddRazorPages();
            }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                app.UseRouting();
                app.UseEndpoints(endpoints => endpoints.MapRazorPages());
                app.UseEndpoints(endpoints =>
                                             {
                                               endpoints.MapControllerRoute("default", " 
                                               {controller=Home}/{action=Index}/{id?}");
                                              });                 
            }
    }

要获取更多信息,请查看 Microsof documentation