ASP.NET Core MVC应用程序中,默认情况下使用的是基于约定的文件夹结构。但是,在某些情况下,您可能需要自定义文件夹路径或重写默认路径映射。这时就需要手动进行配置。
在Startup.cs文件的ConfigureServices方法中,添加以下代码以自定义文件夹路径:
services.AddMvc().AddRazorOptions(options =>
{
options.ViewLocationFormats.Clear();
options.ViewLocationFormats.Add("/MyViews/{1}/{0}" + RazorViewEngine.ViewExtension);
options.ViewLocationFormats.Add("/MyViews/Shared/{0}" + RazorViewEngine.ViewExtension);
options.ViewLocationExpanders.Add(new CustomViewLocationExpander());
});
上述代码将替换默认的文件夹路径映射,将视图文件的搜索路径更改为“/MyViews/{1}/{0}”和“/MyViews/Shared/{0}”,其中“{1}”表示控制器名称,“{0}”表示视图名称。
此外,您还需要添加CustomViewLocationExpander类作为视图位置扩展器,以帮助应用程序在指定的文件夹路径中查找视图。示例代码如下:
public class CustomViewLocationExpander : IViewLocationExpander
{
public void PopulateValues(ViewLocationExpanderContext context)
{
}
public IEnumerable ExpandViewLocations(
ViewLocationExpanderContext context,
IEnumerable viewLocations)
{
var moduleInfo = context.Values["moduleInfo"].ToString();
return new[]
{
$"/MyModules/{moduleInfo}/Views/{{1}}/{{0}}.cshtml",
$"/MyModules/{moduleInfo}/Views/Shared/{{0}}.cshtml",
};
}
}
CustomViewLocationExpander类实现了IViewLocationExpander接口,并重写了ExpandViewLocations方法,该方法指定了要搜索的文件夹路径。在此示例中,“MyModules”文件夹是自定义文件夹路径,“moduleInfo