我正在尝试在ASP.NET MVC Core 2应用程序中配置默认主页,但遇到了一些困难。似乎无法正确映射路由到没有使用参数的正确主页,默认情况下,如https://localhost:44362。
我不太喜欢将控制器放在控制器文件夹中,视图放在Views中,而将视图模型放在Models中的默认约定。我更喜欢按功能分组。
因此,我的结构如下:
Features
Home
HomeController.cs
HomeIndex.cshtml
HomeViewModel.cs
Other
OtherController.cs
OtherIndex.cshtml
OtherViewModel.cs
除了在没有提供路径时似乎无法将默认页面设置为/Home/Index之外,一切都正常工作。当HomeController在Controllers中(并且Index在Views / Home中)时,一切都很好,但是当我移动它时,问题就出现了。
我正在使用默认的Startup.cs文件,因此我的Configure方法如下:
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");
});
那会抛出一个异常:“值不能为空或为空 (pageName)”。我还尝试了“/”、“/Home/Index”作为参数。最后,为了保证万无一失,我也交换了上述参数,以防我误解了每个参数的用法。
在每种情况下,都没有显示页面。如果我输入完整的URL /Home/Index,则可以正常工作。我还尝试为HomeController类附加[Route("Home")]属性,并为操作方法附加[Route("Index")]。
所以我显然搞乱了路由,但我不清楚如何解决这个问题。我已经反复阅读了有关Razor Pages的文档,但似乎并没有澄清我的理解。
/Home/Index
,而是/Features/Home/Home/Index
。在我看来,这是一个非常糟糕的想法,你应该坚持使用MVC提供的内容。如果你想要分组,可以使用区域(areas)。另外,AddRazorPagesOptions
是用于 ASP.NET Core Razor Pages 的,而你并未使用它,所以这不会有任何有用的效果。 - Camilo TerevintoControllers
和Views
文件夹存在。将视图保留在Views文件夹中还可以使部署更加高效--只需要复制cshtml文件即可。您可以查看Areas,这将为您提供一种分组控制器的方法。 - Jasen