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/lonelyxmas/p/12696001.html

时间: 2024-08-28 20:44:58

ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的相关文章

ASP.NET Core MVC 授权的扩展:自定义 Authorize Attribute 和 IApplicationModelProvide

一.概述 ASP.NET Core MVC 提供了基于角色( Role ).声明( Chaim ) 和策略 ( Policy ) 等的授权方式.在实际应用中,可能采用部门( Department , 本文采用用户组 Group ).职位 ( 可继续沿用 Role ).权限( Permission )的方式进行授权.要达到这个目的,仅仅通过自定义 IAuthorizationPolicyProvider 是不行的.本文通过自定义 IApplicationModelProvide 进行扩展. 二.P

ASP.NET Core 入门教程 7、ASP.NET Core MVC 分部视图入门

原文:ASP.NET Core 入门教程 7.ASP.NET Core MVC 分部视图入门 一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)分部视图简介 ASP.NET Core MVC (Razor)分部视图基础教程 ASP.NET Core MVC (Razor)强类型分部视图教程 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SDK 2.1.401 ASP.NET Core 2.1.3 IDE Visual Studio Code 1

007.Adding a view to an ASP.NET Core MVC app -- 【在asp.net core mvc中添加视图】

Adding a view to an ASP.NET Core MVC app 在asp.net core mvc中添加视图 2017-3-4 7 分钟阅读时长 本文内容 1.Changing views and layout pages 修改视图和布局页 2.Change the title and menu link in the layout file 在布局文件中修改标题与菜单 3.Passing Data from the Controller to the View 从控制器向视图

ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门

原文:ASP.NET Core 入门教程 5.ASP.NET Core MVC 视图传值入门 一.前言 1.本教程主要内容 ASP.NET Core MVC 视图引擎(Razor)简介 ASP.NET Core MVC 视图(Razor)ViewData使用示例 ASP.NET Core MVC 视图(Razor)ViewBag使用示例 ASP.NET Core NVC 视图(Razor)强类型传值(ViewModel)页示例 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10

ASP.NET Core MVC 视图

ASP.NET Core MVC中视图的知识和ASP.NET MVC有很多相似之处,学习难度较低.以下内容主要体现了编程中模块化的思想,模块化才应是我们关注的重点. Layout 布局用于提供各个页面所需的公共部分,如:菜单.页头.页尾等.在ASP.NET Core中默认的布局文件是位于/Views/Shared文件夹下的_Layout.cshtml文件: 我们通常在_Layout.cshtml中引入公共资源,如: <link href="~/css/reset.css" rel

Asp.Net Core MVC控制器和视图之间传值

一.Core MVC中控制器和视图之间传值方式和Asp.Net中非常类似 1.弱类型数据:ViewData,ViewBag 2.强类型数据:@model 二.代码 实例  1.ViewData public IActionResult Index() { //测试的 时候在Cummuty2017的最新版中右键添加视图生成的 视图文件的编码 为ANSI对于中文显示乱码 //使用ViewData 实现 控制器 和 视图之间传值 /* * 1.ViewData指定键值对的方式设置或读取 数据 * 2.

asp.net core mvc权限控制:在视图中控制操作权限

在asp.net core mvc中提供了权限验证框架,前面的文章中已经介绍了如何进行权限控制配置,权限配置好后,权限验证逻辑自动就会执行,但是在某些情况下,我们可能需要在代码里或者视图中通过手工方式判断权限,我们现在就来介绍下具体的操作方法. 如果在控制器方法里想要判断当前用户是否具有某个权限,可以直接使用HttpContext.User.HasClaim(string cliamtype,string cliamvalue)方法进行判断,该方法返回bool类型,返回true表示具有权限,否则

从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用ApplicationPart动态加载控制器和视图

标题:从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图作者:Lamond Lu地址:https://www.cnblogs.com/lwqlun/p/11137788.html源代码:https://github.com/lamondlu/Mystique 前言# 如果你使用过一些开源CMS的话,肯定会用过其中的的插件化功能,用户可以通过启用或者上传插件包的方式动态添加一些功能,那么在ASP.NET Core MVC中如

Pro ASP.NET Core MVC 6th 第三章

第三章 MVC 模式,项目和约定 在深入了解ASP.NET Core MVC的细节之前,我想确保您熟悉MVC设计模式背后的思路以及将其转换为ASP.NET Core MVC项目的方式. 您可能已经了解本章中讨论的一些想法和约定,特别是如果您已经完成了高级ASP.NET或C#开发. 如果没有,我鼓励你仔细阅读 - 深入地理解隐藏在MVC背后的东西可以帮助你在通读本书时更好地与MVC框架的功能联系起来. MVC的历史 模型视图控制器模式起源于20世纪70年代后期,来自施乐PARC的Smalltalk