C# 如何让Asp.NETCore返回正确的视图

C# 如何让Asp.NETCore返回正确的视图,c#,asp.net-core,routes,C#,Asp.net Core,Routes,我的Asp.Net核心项目安排如下: MyApp --Folder1 Folder1Controller.cs Index.cshtml --Folder2 Folder2Controller.cs Index.cshtml --Views Shared etc.. 我已经更改了启动程序,以便它知道以下目录结构: services.Configure<RazorViewEngineOptions>(options => { options.Vi

我的Asp.Net核心项目安排如下:

MyApp
--Folder1
  Folder1Controller.cs
  Index.cshtml
--Folder2
  Folder2Controller.cs
  Index.cshtml
--Views
  Shared
  etc..
我已经更改了启动程序,以便它知道以下目录结构:

services.Configure<RazorViewEngineOptions>(options =>
{
    options.ViewLocationFormats.Clear();
    options.ViewLocationFormats.Add($"/Folder1/{{0}}{RazorViewEngine.ViewExtension}");
    options.ViewLocationFormats.Add($"/Folder2/{{0}}{RazorViewEngine.ViewExtension}");
    options.ViewLocationFormats.Add($"/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}");
});
而且效果很好。但是,
Folder2Controller
的代码看起来完全相同。问题在于,当它为
Folder2
执行
Index()
方法时,它首先查找
Folder1
。我可以通过这样做来绕过它:

public IActionResult Index(string id)
{
    return View("/Folder2/Index.cshtml");
}

我的问题是,有没有办法让Asp.NETCore先查看当前目录?即使我使用相对路径(
“/Index”
),它仍然会首先转到
Folder1

您可以在Folder1、folder2中添加一个名为controller name的文件夹,以便路由能够识别要查找的视图

首先,更改文件夹结构,如下所示:

public IActionResult Index()
{            
    return View();
}
MyApp
--Folder1
  Folder1Controller.cs
  --Folder1
    Index.cshtml
--Folder2
  Folder2Controller.cs
  --Folder2
    Index.cshtml
--Views
  Shared
  etc..
启动:

  services.Configure<RazorViewEngineOptions>(options =>
                {
                    options.ViewLocationFormats.Clear();
                    options.ViewLocationFormats.Add("/Folder1/{1}/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add("/Folder2/{1}/{0}" + RazorViewEngine.ViewExtension);
                    options.ViewLocationFormats.Add($"/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}");
                });
services.Configure(选项=>
{
options.ViewLocationFormats.Clear();
options.ViewLocationFormats.Add(“/Folder1/{1}/{0}”+RazorViewEngine.ViewExtension);
options.ViewLocationFormats.Add(“/Folder2/{1}/{0}”+RazorViewEngine.ViewExtension);
options.ViewLocationFormats.Add($“/Views/Shared/{{0}}{RazorViewEngine.ViewExtension}”);
});
结果:

控制器的源位置未映射到uri路径。最近的特征可能是区域的。