ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径

简介:

ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径

IViewLocationExpander API

ExpandViewLocations Razor视图路径,视图引擎会搜索该路径.
PopulateValues 每次调用都会填充路由
项目目录如下所示

创建区域扩展器,其实我并不需要多区域,我目前只需要达到一个区域中有多个文件夹进行存放我的视图.

所以我通过实现IViewLocationExpander进行扩展添加我自定义视图路径规则即可正如下代码片段

public class MyViewLocationExpander : IViewLocationExpander

{
    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
    {
        if (context.ControllerName != null && context.ControllerName.StartsWith("App"))
        {
            viewLocations = viewLocations.Concat(
                new[] { $"/Areas/sysManage/Views/App/{context.ControllerName}/{context.ViewName}{RazorViewEngine.ViewExtension}"
                       });
            return viewLocations;
        }

        if (context.AreaName != "sysManage") return viewLocations;
        viewLocations = viewLocations.Concat(
            new[] { $"/Areas/sysManage/Views/System/{context.ControllerName}/{context.ViewName}{RazorViewEngine.ViewExtension}"
            });
        return viewLocations;
    }

    public void PopulateValues(ViewLocationExpanderContext context)
    {
    }
}

在Startup.ConfigureServices 注册

public void ConfigureServices(IServiceCollection services)

    {  
        services.Configure<RazorViewEngineOptions>(o => {  
            o.ViewLocationExpanders.Add(new MyViewLocationExpander());  
        });  
        services.AddMvc();  
    } 

app.UseEndpoints(endpoints =>

        {
            endpoints.MapRazorPages();
            endpoints.MapAreaControllerRoute(
                name: "sysManage", "sysManage",
                pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
        });

最终路由指向的还是

/SysManage/Controller/Action
原文地址https://www.cnblogs.com/yyfh/p/12636976.html

相关文章
|
4月前
|
监控 安全 API
Docker + .NET API:简化部署和扩展
Docker + .NET API:简化部署和扩展
64 1
|
5月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
70 7
|
4月前
|
监控 安全 API
最完美的扩展Docker + .NET API:简化部署和扩展
最完美的扩展Docker + .NET API:简化部署和扩展
120 0
|
5月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
113 0
|
6月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
85 0
|
6月前
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法
|
6月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
100 0
|
6月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
186 0
|
开发框架 .NET 中间件
ASP.NET Core 面试题(二)
ASP.NET Core 面试题(二)
343 0
|
开发框架 JSON .NET
ASP.NET Core 面试题(一)
ASP.NET Core 面试题(一)
1006 0

热门文章

最新文章