c# - 如何在 ASP.NET Core 2 中设置默认主页?

标签 c# asp.net-core

我在 ASP.NET MVC Core 2 应用程序中配置默认​​主页时遇到一些困难。当不使用参数时,我似乎无法将路由映射到默认的正确主页,例如。 https://localhost:44362

我真的不喜欢将 Controller 放在 Controller 文件夹中、在 View 中查看、在模型中查看模型的默认约定。我更喜欢按功能分组。

所以我有这样的结构:

Features
   Home
      HomeController.cs
      HomeIndex.cshtml
      HomeViewModel.cs
   Other
      OtherController.cs
      OtherIndex.cshtml
      OtherViewModel.cs

一切正常,除了在未提供路径时我似乎无法将默认页面设置为/Home/Index 。当 HomeController 位于 Controller 中(以及 Views/Home 中的索引)时,一切正常,但一旦我移动它,事情就崩溃了。

我使用默认的 Startup.cs 文件,因此我有一个如下所示的配置方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseAuthentication();

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

我做了一些搜索,看起来在ConfigureServices方法中使用它应该可以工作:

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

这会引发:值不能为 null 或空 (pageName) 异常。我还尝试了“/”、“/Home/Index”作为参数。最后,为了更好地衡量,我还交换了上述参数,以防我误解每个参数的用法。

在任何情况下,都不会显示任何页面。如果我输入完整的 URL/Home/Index,它就会起作用。我还尝试将 [Route("Home")] 属性附加到 HomeController 类,并将 [Route("Index")] 附加到操作方法。

所以我显然搞乱了路由,但我根本不清楚如何解决这个问题。我已经阅读并重新阅读了 Razor Pages 上的文档,这似乎并没有澄清我的理解。

最佳答案

@paul-mrozowski,您的上述解决方案几乎是正确的。对于基本页面,您必须使用以下方法来更改默认路由,前提是您的 Index 页面位于 /Pages/Home/ 目录下:

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

以防万一有人使用 Areas,只要您的 Index 页面位于 /Areas/SomeArea/Pages/ 目录下,方法就会类似:

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

关于c# - 如何在 ASP.NET Core 2 中设置默认主页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49460010/

相关文章:

c# - 尝试将值从文本框分配给变量时出现空异常

c# - .NET 中不同运行时间执行的相同正则表达式

c# - 带有 .any() 的 LINQ 语句未返回。永远加载

c# - 如何实现抽象工厂的客户端代码?

reactjs - 从 React App 中的 Azure 门户访问应用程序设置

c# - 在 C# 中反序列化 Zomato JSON 响应

c# - 告诉 Swashbuckle 只查找具有 ApiControllerAttribute 的 Controller

c# - 为内部站点搜索建立静态页面内容索引

c# - BeginForm 弄乱了 .NET 6 中的 Controller 路径值

c# - 为什么替代项的顺序在正则表达式中很重要?