【问题标题】:Default page in ASP.NET Core 3.1ASP.NET Core 3.1 中的默认页面
【发布时间】:2023-04-03 22:05:02
【问题描述】:

我需要更改项目的默认起始页,但它不起作用。我正在使用

services.AddMvc().AddRazorPagesOptions(options =>
        {
            options.Conventions.AddPageRoute("/Login/Index", "");
        });

但是当项目启动时,它并没有转到LoginController

更新。当我尝试将默认控制器更改为 LoginController 时,它会合并到主模板中,而无需在剃须刀页面上设置 Layout

 public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages().AddRazorRuntimeCompilation();
        services.AddControllersWithViews();


    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");

            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

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

【问题讨论】:

  • this question 的答案可能会有所帮助
  • 不行!
  • 它不会转到控制器,因为您发出的调用是针对 Razor 页面,而不是 mvc。
  • 我该如何解决这个问题?
  • 你的应用是 MVC 还是 Razor Pages?

标签: c# asp.net-core


【解决方案1】:

如果您想将所有用户重定向到通过控制器解析的特定路由,您必须像这样定义该路由:

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

请注意,虽然路由到 Razor 页面的工作方式大体相似,但 Razor 页面不使用控制器并且配置不同。

文档:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1

【讨论】:

  • 我收到有关使用 EndPoints 的警告。我会发布我的更新。
【解决方案2】:

如果您将 Endpoints 与 razor 一起使用,则实际上可以通过多种方式设置默认页面,我将提供几种方式。您当前在 Startup.cs 中的代码应该可以使用下面列出的方法。

1:创建一个与你的页面同名的ActionResult

通过使用反映默认端点路径的 ActionResult 创建控制器,根目录现在应该是您的默认页面。 (是的,就是这么简单。)

public class HomeController : Controller {

    public IActionResult Login() => View();

}

2:使用[Route()]属性

如果您有多种访问视图的方式,此方法很有用。我不建议使用它,除非该页面违反了您的路由的一般规则。
也可以将其设为默认根页面,而无需在端点路由中提供任何默认值。

// Startup.cs
public class Startup {
    public void ConfigureServices(IServiceCollection service) {
        services.AddControllers().AddNewtonsoftJson(jsonSettings);
        services.AddControllersWithViews().AddNewtonsoftJson(jsonSettings);
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
        app.UseRouting();
        
        app.UseEndpoints(endpoints => {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller}/{action}/{id?}");
            endpoints.MapRazorPages();
        });
    }
}

// HomeController.cs
public class HomeController : Controller {

    // Putting any Route attribute will remove the default route of '/Home/Login' unless specified. 
    //[Route("/Home/Login")]
    [Route("/")]
    public IActionResult Login() => View();

}

3:页面!

页面是 Razor 中的一个较新概念,它专注于 .cshtml 文件中的类和属性,而不是基于控制器/动作的项目结构。我不会解释细节,但微软有文档here 和基本教程here

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 2021-12-25
    • 2021-12-16
    • 2019-10-13
    • 2018-11-14
    • 2012-03-21
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多