這篇文章給大家介紹AmazingASP.NETCore的新特性有哪些,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括大廠網(wǎng)站建設(shè)、大廠網(wǎng)站制作、大廠網(wǎng)頁(yè)制作以及大廠網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,大廠網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到大廠省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!每一次大版本的發(fā)布和升級(jí),總會(huì)帶給開發(fā)人員一些驚喜和令人興奮的特性,有關(guān) ASP.NET Core 本次的 2.0 版本的新特性,主要集中在幾個(gè)部分上。
SDK 的變化
PS: 目前如果你想在VS中體驗(yàn) ASP.NET Core 2.0 全部特性的話,你需要 VS 2017.3 預(yù)覽版本。當(dāng)然你可以使用 VS Core 來快速了解。
.NET Core 2.0 Priview 的下載地址:
https://www.microsoft.com/net/core/preview
完成之后可以在 cmd 中使用以下命令查看版本。
變化1:添加了如下圖箭頭所指新命令。
dotnet new razor dotnet new nugetconfig dotnet new page dotnet new viewimports dotnet new viewstart
添加了這些新的cli命令。 其中 viewimports,viewstart 即為Razor視圖中的_xxx.cshtml那兩個(gè)文件.
變化2: dotnet new xxx 將會(huì)自動(dòng)還原 NuGet 包,不需要你再次進(jìn)行 dotnet restore 命令了。
G:\Sample\ASPNETCore2 > dotnet new mvc The template "ASP.NET Core Web App (Model-View-Controller)" was created successfully. This template contains technologies from parties other than Microsoft, see https://aka.ms/template-3pn for details. Processing post-creation actions... Running 'dotnet restore' on G:\Sample\ASPNETCore2\ASPNETCore2.csproj... Restore succeeded.
*.csproj 項(xiàng)目文件
在 2.0 中,當(dāng)創(chuàng)建一個(gè) MVC 項(xiàng)目的時(shí)候,生成的 csporj 項(xiàng)目文件如下:
其中,紅色箭頭部分為新增內(nèi)容,我們依次來看一下:
MvcRazorCompileOnPublish:
在 1.0 版本中,如果我們需要在發(fā)布的時(shí)候編譯 MVC 中的 Views 文件夾為DLL的話,需要引用
Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 這個(gè) NuGet 包,而現(xiàn)在已經(jīng)不需要了,這個(gè)功能已經(jīng)默認(rèn)的集成在了SDK中,只需要在csporj添加配置即可,在發(fā)布的時(shí)候?qū)?huì)自動(dòng)打包 Views 文件夾中的 *.cshtml 文件為 DLL 程序集。
PackageTargetFallback
這個(gè)配置項(xiàng)是用來配置當(dāng)前程序集支持的目標(biāo)框架。
UserSecretsId
這個(gè)是用來存儲(chǔ)程序中使用的機(jī)密,以前是存儲(chǔ)在 project.json 文件中,現(xiàn)在你可以在這里進(jìn)行配置了。
有關(guān) UserSecrets 的更多信息,可以查看我的這篇博客文章。
MVC 相關(guān)包
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0-preview1-final" />
在 Core MVC 2.0 中,所有MVC相關(guān)的NuGet 包都被集成到了這個(gè)Microsoft.AspNetCore.All包中,它是一個(gè)元數(shù)據(jù)包,包含了大量的東西,其中包括:Authorization, Authentication, Identity, CORS, Localization, Logging, Razor, Kestrel 等,除了這些它還附加了 EntityFramework, SqlServer, Sqlite 等包。
有些同學(xué)可能會(huì)覺得這樣會(huì)引用了很多項(xiàng)目中使用不到的程序集,導(dǎo)致發(fā)布后的程序變得很龐大,不過我要告訴你不必?fù)?dān)心,發(fā)布后的程序集不但不會(huì)變得很大,反而會(huì)小很多,因?yàn)?Microsoft 把所有的這些依賴全部都集成到了sdk中,也就是說當(dāng)你安裝sdk的之后,MVC相關(guān)的包就已經(jīng)安裝到了你的系統(tǒng)上。
這樣的好處是你不用擔(dān)心更新Nuget包或者刪除的時(shí)候,因?yàn)榇罅康陌姹静灰恢聠栴}導(dǎo)致隱藏的沖突問題,另外一個(gè)好處就是,這樣對(duì)于很多新手的話就很友好 2333,他們不需要知道他們什么情況下會(huì)從那個(gè)NuGet 包中獲取自己需要的信息。
現(xiàn)在,發(fā)布后的文件夾是如此簡(jiǎn)潔: 大小 4.3M
再貼個(gè)以前的 發(fā)布后的文件夾你們感受一下: 大小 16.5M
有些同學(xué)可能好奇他們把那些引用的 MVC 包放到哪里了,默認(rèn)情況下他們位于這個(gè)目錄:
C:\Program Files\dotnet\store\x64\netcoreapp2.0
新的 Program.cs 和 Startup.cs
現(xiàn)在,當(dāng)創(chuàng)建一個(gè) ASP.NET Core 2.0 MVC 程序的時(shí)候,Program 和 Startup 已經(jīng)發(fā)生了變化,他們已經(jīng)變成了這樣:
Program.cs
public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build(); }
Startup.cs
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } }
可以發(fā)現(xiàn),新的 Program.cs 中和 Startup.cs 中的內(nèi)容已經(jīng)變得很簡(jiǎn)單了,少了很多比如 appsetting.json 文件的添加,日志中間件, Kertrel , HostingEnvironment 等,那么是怎么回事呢? 其他他們已經(jīng)被集成到了 WebHost.CreateDefaultBuilder 這個(gè)函數(shù)中,那么我們跟進(jìn)源碼來看一下內(nèi)部是怎么做的。
WebHost.CreateDefaultBuilder
下面是 WebHost.CreateDefaultBuilder 這個(gè)函數(shù)的源碼:
public static IWebHostBuilder CreateDefaultBuilder(string[] args) { var builder = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .ConfigureAppConfiguration((hostingContext, config) => { var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); if (env.IsDevelopment()) { var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName)); if (appAssembly != null) { config.AddUserSecrets(appAssembly, optional: true); } } config.AddEnvironmentVariables(); if (args != null) { config.AddCommandLine(args); } }) .ConfigureLogging((hostingContext, logging) => { logging.UseConfiguration(hostingContext.Configuration.GetSection("Logging")); logging.AddConsole(); logging.AddDebug(); }) .UseIISIntegration() .UseDefaultServiceProvider((context, options) => { options.ValidateScopes = context.HostingEnvironment.IsDevelopment(); }) .ConfigureServices(services => { services.AddTransient<IConfigureOptions<KestrelServerOptions>, KestrelServerOptionsSetup>(); }); return builder; }
可看到,新的方式已經(jīng)隱藏了很多細(xì)節(jié),幫助我們完成了大部分的配置工作。但是你知道怎么樣來自定義這些中間件或者配置也是必要的技能之一。
appsettings.json 的變化
在 appsettings.json 中,我們可以定義 Kestrel 相關(guān)的配置,應(yīng)用程序會(huì)在啟動(dòng)的時(shí)候使用該配置進(jìn)行Kerstrel的啟動(dòng)。
{ "Kestrel": { "Endpoints": { "Localhost": { "Address": "127.0.0.1", "Port": "9000" }, "LocalhostHttps": { "Address": "127.0.0.1", "Port": "9001", "Certificate": "Https" } } }, "Certificate": { "HTTPS": { "Source": "Store", "StoreLocation": "LocalMachine", "StoreName": "MyName", "Subject": "CN=localhost", "AllowInvalid": true } }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } } }
以上配置內(nèi)容配置了 Kertrel 啟動(dòng)的時(shí)候使用的本地地址和端口,以及在生產(chǎn)環(huán)境需要使用的 HTTPS 的配置項(xiàng),通常情況下關(guān)于 HTTPS 的節(jié)點(diǎn)配置部分應(yīng)該位于 appsettings.Production.json 文件中。
現(xiàn)在,dotnet run在啟動(dòng)的時(shí)候?qū)⑼瑫r(shí)監(jiān)聽 9000, 和 9001 端口。
日志的變化
在 ASP.NET Core 2.0 中關(guān)于日志的變化是非常令人欣慰的,因?yàn)樗F(xiàn)在不是作為MVC中間件配置的一部分了,而是 Host 的一部分,這句話好像有點(diǎn)別扭,囧~。 這意味著你可以記錄到更加底層產(chǎn)生的一些錯(cuò)誤信息了。
現(xiàn)在你可以這樣來擴(kuò)展日志配置。
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging(factory=>{你的配置}) .Build();
全新的 Razor Pages
ASP.NET Core 2.0 引入的另外一個(gè)令人興奮的特性就是 Razor Pages。提供了另外一種方式可以讓你在做Web 頁(yè)面開發(fā)的時(shí)候更加的沉浸式編程,或者叫 page-focused 。額...它有點(diǎn)像以前 Web Form Page,它隸屬于 MVC 框架的一部分,但是他們沒有 Controller。
你可以通過dotnet new razor命令來新建一個(gè) Razor Pages 類型的應(yīng)用程序。
Razor Pages 的 cshtml 頁(yè)面代碼可能看起來是這樣的:
@page @{ var message = "Hello, World!"; } <html> <body> <p>@message</p> </body> </html>
Razor Pages 的頁(yè)面必須具有 @page 標(biāo)記。他們可能還會(huì)有一個(gè) *.cshtml.cs 的 class 文件,對(duì)應(yīng)的頁(yè)面相關(guān)的一些代碼,是不是很像 Web Form 呢?
有同學(xué)可能會(huì)問了,沒有 Controller 是怎么路由的呢? 實(shí)際上,他們是通過文件夾物理路徑的方式進(jìn)行導(dǎo)航,比如:
有關(guān) Razor Pages的更多信息可以看這里:
https://docs.microsoft.com/en-us/aspnet/core/razor-pages
可以看到,在 ASP.NET Core 2.0 中,給我們的開發(fā)過程帶來了很多便利和幫助,他們包括 Program 等的改進(jìn),包括 MVC 相關(guān) NuGet 包的集成,包括appsetting.json的服務(wù)器配置,以及令人驚訝的Razor Page。
關(guān)于AmazingASP.NETCore的新特性有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
名稱欄目:AmazingASP.NETCore的新特性有哪些-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://www.rwnh.cn/article4/dciiie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、營(yíng)銷型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)建站、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容