.NET Core 多模块

Fork Me On Github

说明

最近准备把本站源码从PHP 迁移到 .NET Core。遇到一个首要问题就是本站是分模块开发的,我也想过分成多个项目来做,但又涉及本站的基础框架,必须所有模块都能随着基础升级,我怕麻烦就整合到一起了。

做法

Areas 是 ASP.NET MVC 功能,在官方文档有介绍【Areas in ASP.NET Core

第一步

Startup.cs 中添加配置

c#
            
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseMvc(routes =>
    {
        routes.MapRoute(
                name: "areaRoute",
                template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");  // 
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
}
123456789101112

第二步

新建文件夹 Areas/Blog/Controllers

新建控制器 HomeController.cs

c#
        
[Area("Blog")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
12345678

文件夹名可以用其他,关键 使用 Area 声明 区域,使路由能指向这里,改了文件夹也要记得改视图的文字

第三步

注册视图位置

c#
       
services.Configure<RazorViewEngineOptions>(options =>
{
    options.AreaViewLocationFormats.Clear();
    options.AreaViewLocationFormats.Add("/Categories/{2}/Views/{1}/{0}.cshtml");
    options.AreaViewLocationFormats.Add("/Categories/{2}/Views/Shared/{0}.cshtml");
    options.AreaViewLocationFormats.Add("/Views/Shared/{0}.cshtml");
});
1234567

默认会自动从这些位置找

html
   
/Areas/<Area-Name>/Views/<Controller-Name>/<Action-Name>.cshtml
/Areas/<Area-Name>/Views/Shared/<Action-Name>.cshtml
/Views/Shared/<Action-Name>.cshtml
123

链接生成

HtmlHelper 语法

c#
 
@Html.ActionLink("Go to Services Home Page", "Index", "Home", new { area = "Services" })
1

TagHelper 语法

html
 
<a asp-area="Services" asp-controller="Home" asp-action="Index">Go to Services Home Page</a>
1
点击查看全文
1 397 0