我在ASP.NET MVC Core 2应用程序中配置默认主页时遇到一些困难。当没有使用参数时,我似乎无法将路由映射到正确的主页,默认情况下,例如。 https://localhost:44362
我真的不喜欢将控制器置于Controllers文件夹,视图中的视图和模型中的视图模型中的默认约定。我更喜欢按功能分组。
所以我有这样的结构:
Features
Home
HomeController.cs
HomeIndex.cshtml
HomeViewModel.cs
Other
OtherController.cs
OtherIndex.cshtml
OtherViewModel.cs
一切正常,但是当没有提供路径时,我似乎无法将默认页面设置为/ Home / Index。当HomeController在Controllers(和视图/主页中的索引)中时,一切都有效,但是一旦我移动它,事情就会崩溃。
我正在使用默认的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");
});
抛出a:值不能为null或为空(pageName)异常。我还尝试了“/”,“/ Home / Index”作为参数。最后,为了更好的衡量,我还交换了上述参数,以防万一我误解了每个参数的用法。
在每种情况下,都不会显示任何页面。如果我输入完整的URL / Home / Index,它就可以了。我还尝试将[Route(“Home”)]属性附加到HomeController类,并将[Route(“Index”)]附加到action方法。
所以我显然搞砸了路由,但我并不清楚如何解决这个问题。我已经阅读并重新阅读了Razor Pages上的文档,这些文档似乎没有让我理解。
答案 0 :(得分:2)
看起来我需要做的就是调整Razor视图引擎在Startup.cs中的位置
How to specify the view location
在这篇博文中:
Feature Folder Structure in ASP.NET Core
然后我只需要删除我在测试期间添加的Route属性并开始工作。
答案 1 :(得分:2)
@ 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", "");
});