Asp.net core 学习笔记 ( Area and Feature folder structure 文件结构 )
2017-09-22 14:56
921 查看
2017-09-22
refer :
https://msdn.microsoft.com/en-us/magazine/mt763233.aspx?f=255&MSPPError=-2147217396 https://scottsauber.com/2016/04/25/feature-folder-structure-in-asp-net-core/ https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas
典型的 MVC 结构是像上面这样的, 所有的 controllers, views 独立收藏.
这种结构在项目逐渐复杂后就会变得很难用.
这里介绍另一种结构
比如我们要开发一个 Web, 一个 AMP 版本, 还要公开一些 API.
那么我们可能希望结构像上面这样, 大伙分开管理, 但又可以用相同名字的控制器.
怎么实现呢 ?
首先要引入 Area 概念, 这个是 core 的新东西.
从前的 route 匹配只有 controller + action , 现在多了一个 area
每个控制器要定义好专属的 Area.
然后是 startup.cs
Area 的部分说完了.
另一个重点是 Feature, feature 只是个代名词, 也不是 core 的东西.
它只是一个寻找 .cshtml 的方法而已.
core 原生的结构是这样的 : 路由匹配到控制器后, 通过 area + control + action 去 Views 里面寻找 cshtml
然而现在我们把 Views 给删除了, 所以我们得告诉它新的 location
在 startup.cs
设置新的 location 逻辑
以上.
refer :
https://msdn.microsoft.com/en-us/magazine/mt763233.aspx?f=255&MSPPError=-2147217396 https://scottsauber.com/2016/04/25/feature-folder-structure-in-asp-net-core/ https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas
典型的 MVC 结构是像上面这样的, 所有的 controllers, views 独立收藏.
这种结构在项目逐渐复杂后就会变得很难用.
这里介绍另一种结构
比如我们要开发一个 Web, 一个 AMP 版本, 还要公开一些 API.
那么我们可能希望结构像上面这样, 大伙分开管理, 但又可以用相同名字的控制器.
怎么实现呢 ?
首先要引入 Area 概念, 这个是 core 的新东西.
从前的 route 匹配只有 controller + action , 现在多了一个 area
namespace Project.Controllers { [Area("Web")] public class HomeController : Controller { public IActionResult Index() { return View(); } } }
每个控制器要定义好专属的 Area.
然后是 startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMvc(routes => { routes.MapRoute( name: "AMP", template: "amp/{controller=Home}/{action=Index}", defaults : new { area = "AMP" } ); routes.MapRoute( name: "Web", template: "{controller=Home}/{action=Index}", defaults: new { area = "Web" } ); }); }
Area 的部分说完了.
另一个重点是 Feature, feature 只是个代名词, 也不是 core 的东西.
它只是一个寻找 .cshtml 的方法而已.
core 原生的结构是这样的 : 路由匹配到控制器后, 通过 area + control + action 去 Views 里面寻找 cshtml
然而现在我们把 Views 给删除了, 所以我们得告诉它新的 location
在 startup.cs
public void ConfigureServices(IServiceCollection services) { services.Configure<RazorViewEngineOptions>(options => { options.ViewLocationExpanders.Add(new FeatureLocationExpander()); }); services.AddMvc(); }
设置新的 location 逻辑
public class FeatureLocationExpander : IViewLocationExpander { public void PopulateValues(ViewLocationExpanderContext context) { // Don't need anything here, but required by the interface } public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) { // {0} - Action Name // {1} - Controller Name // {2} - Area Name return new string[] { "/{2}/{1}/{0}.cshtml", "/{2}/Shared/{0}.cshtml" }; } }
以上.
相关文章推荐
- ASP.NET Core 2.0系列学习笔记-配置文件
- ASP.NET Core 2 学习笔记(五)静态文件
- Asp.net core 学习笔记 ( Smtp and Razor template 电子邮件和 Razor 模板 )
- [dotnetCore2.0]学习笔记之二: ASP.NET Core中,如何灵活使用静态文件和加载自定义配置
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- Asp.net core 学习笔记 ( upload/download files 文件上传与下载 )
- ASP.NET Core 2.0系列学习笔记-NLog日志配置文件
- ASP.NET MVC学习---(二)EF文件结构
- [译]【NetCore学习笔记之Anchor TagHelper】ASP.NET Core MVC Anchor Tag Helper
- 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(六)-- 依赖注入
- asp.net core学习笔记-1
- ASP.NET Core应用针对静态文件请求的处理[4]: DirectoryBrowserMiddleware中间件如何呈现目录结构
- asp.net mvc 3.0详细笔记__06__项目文件结构详解_Content和Scripts
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
- [学习心得][Introduction to ASP.NET Core 1.0]3-2 ASP.NET Core and MVC Pattern
- asp.net mvc 3.0详细笔记__07__项目文件结构详解_Global.asax
- [ASP.NET学习笔记之一]ASP.NET中文件操作
- asp.net mvc 2.0详细笔记__02__项目文件结构详解
- 【ASP.NET MVC 学习笔记】- 09 Area的使用
- ASP.NET 3.5核心编程学习笔记(9):用户配置文件