.net Core MVC項目結構對比


遷移、上手core,最開始的門檻就是打開解決方案后打得不一樣了,我是從網上下載的一個項目源碼,但應該都是差不多的

主要區別在web層,后端都差不多

 

一、MVC

framework 4.0的項目(目前公司常用的)

1、Controller和Views一一對應,這個都一樣,雖然叫MVC,但M(Model)文件夾在UI層基本不用,要用實體習慣都在數據層去創建,這樣UI層和數據層都可以用到

2、Web.Config,主要配置connectionStrings連接字符串,還有一定自定義的appSettings屬性

 

 3、Global.asax(具體代碼在Global.asax.cs)

主要是初始化一些注冊項,像路由、過濾器等,並有全局報錯記錄日志

 

4、Content

放置靜態文件,如JS、CSS、圖片等 

5、App_Start

BundleConfig.cs:壓縮合並JS、CSS,不用再用工具去壓縮了,MVC就有提供這功能,在生產環境參數開啟即可

FilterConfig.cs:過濾器,可處理一些日志、報錯

RouteConfig:路由規則,一般默認

WebAPIAuthorizeAttribute、WebApiConfig、WebAPIExceptionAttribute:  看名稱就知道是權限、配置、異常處理等。API可以和MVC混建在一起,用不同控制器區分即可。MVC繼承Controller,API繼承ApiController,當然都會封裝一個BaseController、ApiBaseController進行一些屬性的控制,如權限驗證、日志、異常處理等。

 

二、.net Core

1、雖然還有Web.Config,但不再是用於日常的配置了,僅僅是為了和IIS對接

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <handlers>
                <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
            </handlers>
            <aspNetCore processPath="C:\Program Files\dotnet\dotnet.exe" arguments="watch run" stdoutLogEnabled="true"  stdoutLogFile=".\Log\" />
        </system.webServer>
    </location>
</configuration>

這個之前寫了,主要是dotnet watch run,像JRebel一樣,無需手動編譯就能后台編譯並在瀏覽器上體現出修改后的結果(實際上是dotnet先停止再生成,自動幫我們編譯了,速度很快,不會像F5那樣要初始化半天才能打開,而且仍停留在當前頁上,還能下斷點)。

2、Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseStaticFiles();
            //添加區域支持
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "areas",
                    template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
                );
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

主要在Configure里,支持對開發環境和生產環境分別載入不同的配置項,比如異常頁面,開發環境上報出具體錯誤,生產上是友好的異常頁。

framework也有,公司目前用的是Web.Config里的一個IsFiterException的選項去控制,再在公共的地方判斷,core更方便了些

另外RouteConfig的路由配置也整合進來了

 3、Program.cs

public class Program
    {
        public static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true)
                .Build();
            WebHost.CreateDefaultBuilder(args)
                .UseConfiguration(config)
                .UseStartup<Startup>()
                .Build().Run();
        }
    }

【對於ASP.NET Core應用程序來說,我們要記住非常重要的一點是:其本質上是一個獨立的控制台應用,它並不是必需在IIS內部托管且並不需要IIS來啟動運行(而這正是ASP.NET Core跨平台的基石)。ASP.NET Core應用程序擁有一個內置的Self-Hosted(自托管)的Web Server(Web服務器),用來處理外部請求。】

既然是控制台,那這個Program.cs的Main就是主入口,默認沒有.AddJsonFile("appsettings.json")這項的,如果需要載入自定義的一些配置(如之前說的自定義運行端口,不用默認的5000),可在這里配置

4、bundleconfig.json

即原先的BundleConfig.cs,換成了json,更便於跨平台吧

5、appsettings.json

主要就是可以配置自定義端口,命名成urls即可,叫成其它的認不到:{"urls": "http://localhost:95;"}

6、Pages

看着和framework的Views/Shared一樣,不知是默認就是這樣還是我下載的這個源碼是這樣命名的,反正是一些公用的cshtml

7、wwwroot

即原先的Content,換成wwwroot更直觀

8、Properties / launchSettings.json

有些類似於原先的Web.Config了

{
    "iisSettings": {
        "windowsAuthentication": false,
        "anonymousAuthentication": true,
        "iis": {
            "applicationUrl": "http://localhost:95/",
            "launchUrl": "http://localhost:95/",
            "sslPort": 0
        },
        "iisExpress": {
            "applicationUrl": "http://localhost:54065/",
            "sslPort": 0
        }
    },
    "profiles": {
        "Development": {
            "commandName": "IIS",
            "launchBrowser": true,
            "environmentVariables": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "applicationUrl": "http://localhost:95/",
            "launchUrl": "http://localhost:95/"
        }
    }
}

在項目上右鍵,屬性,里面的【調試】項即本配置

 

9、依賴項

原先要依賴一堆dll的,現在不知是這項目整合還是core就更簡潔,看不到一堆系統內部的引用了,有用到第三方控件時引用即可。

這項目里好像也有引用一些第三方的,怎么在這里也沒看到。而且網上說有個Project.json,是像Maven一樣定義了要引用的控件,但我沒看到,可能封裝隱藏在其它地方,有碰到再看下

 ================

自從微軟做了一個艱難的決定——.NET Core徹底放棄project.json,全面改回.csproj

哦原來又整合進csproj了。。。

 

 如果項目里是這樣:

<ItemGroup>
    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.2.2" />
    <PackageReference Include="AutoMapper" Version="6.2.2" />
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="2.4.0" />
  </ItemGroup>

 

這么整理一下,自已心里也有底了,希望也能幫到路過的朋友,對core上手不再恐懼,熟悉了結構很快就恢復原先的開發體驗了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM