电竞比分网-中国电竞赛事及体育赛事平台

分享

.NET Core發(fā)布在即,試著用編寫(xiě)一個(gè)ASP.NET Core RC2 MVC程序

 weijianian 2016-08-07


來(lái)源:蔣金楠

鏈接:http://www.cnblogs.com/artech/p/5496211.html


在.NET Core 1.0.0 RC2即將正式發(fā)布之際,我也應(yīng)應(yīng)景,針對(duì)RC2 Preview版本編寫(xiě)一個(gè)史上最簡(jiǎn)單的MVC應(yīng)用。由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所以我們直接采用最原始的記事本來(lái)編寫(xiě)這個(gè)MVC應(yīng)用。


步驟一、安裝最新的.NET Core SDK



我們可以根據(jù)自身的操作系統(tǒng)環(huán)境從https://github.com/dotnet/cli上下載.NET Core最新的SDK,這個(gè)SDK包含.NET Core Runtime和一些有用工具(比如命令行)。如果你已經(jīng)安裝了老舊的版本,我個(gè)人建議你先將其卸載。



目前的版本為1.0.0-preview1-002702,我們可以執(zhí)行dotnet –version命令確認(rèn)是否是這個(gè)版本。



步驟二、定義源代碼和配置


我們創(chuàng)建一個(gè)目錄(假設(shè)為C:HelloWorld)來(lái)存放MVC應(yīng)用所有的源文件。下圖展現(xiàn)了定義在這個(gè)目錄下的所有文件。



定義NuGet.config


我們?cè)贜uGet.config文件中定義應(yīng)用程序使用的NuGet包所在的站點(diǎn)地址(https://www./F/aspnetrc2/api/v3/index.json


xml version='1.0' encoding='utf-8'?>

  configuration>

   packageSources>

      add key='RC2' value='https://www./F/aspnetrc2/api/v3/index.json' />

   packageSources>

/configuration>


定義Project.json


定義在Project.json文件中的所有配置如下所示,我們會(huì)發(fā)現(xiàn)它與RC1中的Project.json不太一樣。RC2中,我們可以向定義普通依賴(lài)一樣來(lái)選擇運(yùn)行時(shí)(Microsoft.NETCore.App),或者說(shuō)運(yùn)行時(shí)本質(zhì)已經(jīng)成為了一個(gè)一般意義上的以來(lái)。除了這個(gè)針對(duì)運(yùn)行時(shí)的依賴(lài),我們還添加了兩個(gè)依賴(lài),它們分別是“Microsoft.AspNetCore.Mvc”和“Microsoft.AspNetCore.Server.Kestrel”,前者定義了ASP.NET Core MVC的核心框架,后者則提供了一個(gè)針對(duì)Kestrel的Server (ASP.NET Core管道中的Server專(zhuān)門(mén)負(fù)責(zé)請(qǐng)求的監(jiān)聽(tīng)、接收和回復(fù))。我們?cè)凇癴ramework”節(jié)點(diǎn)添加了一個(gè)名為“netcoreapp1.0”的框架,之前的名稱(chēng)叫做“dnxcore50”。


{

      'version': '1.0.0-*',

      'buildOptions': {

        'emitEntryPoint': true

      },

      'dependencies': {

        'Microsoft.NETCore.App': {

          'type': 'platform',

          'version': '1.0.0-rc2-3002702'

       },

       'Microsoft.AspNetCore.Mvc':'1.0.0-rc2-final',

       'Microsoft.AspNetCore.Server.Kestrel':'1.0.0-rc2-final'

     },

     'frameworks': {

       'netcoreapp1.0': {

         'imports': 'dnxcore50'

       }

     }

   }


定義入口程序


啟動(dòng)應(yīng)用的入口程序定義在Program.cs。如下面的代碼片段所示,我們?cè)谶@個(gè)文件中定義了一個(gè)Program類(lèi)型,并在Main方法中編寫(xiě)了啟動(dòng)MVC應(yīng)用的代碼。具體來(lái)說(shuō),我們創(chuàng)建了一個(gè)WebHostBuilder對(duì)象通過(guò)調(diào)用擴(kuò)展方法UseKestrel為構(gòu)建的HTTP消息處理管道注冊(cè)了一個(gè)Kestrel服務(wù)器。在調(diào)用UseStartup方法將Startup設(shè)置為啟動(dòng)類(lèi)型之后,我們調(diào)用Build方法創(chuàng)建了一個(gè)WebHost對(duì)象。我們最終調(diào)用Run方法啟動(dòng)WebHost,進(jìn)而啟動(dòng)了我們的MVC應(yīng)用。


using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.Builder;

    

    public class Program

    {

        public static void Main(string[] args)

        {

            new WebHostBuilder()

            .UseKestrel()

           .UseStartup()

           .Build()

           .Run();

       }

   }


定義初始化類(lèi)型


ASP.NET Core應(yīng)用啟動(dòng)的時(shí)候會(huì)先執(zhí)行一段初始化操作來(lái)構(gòu)建一個(gè)完整的HTTP消息處理管道,這些初始化操作定義在Startup.cs。上面調(diào)用WebHostBuilder的UseStartup方法指定的類(lèi)型Startup就定義在這個(gè)文件中。如下面的代碼片段所示,我們?cè)贑onfigureServices方法中注冊(cè)了與MVC相關(guān)的服務(wù),并利用Configure方法將實(shí)現(xiàn)MVC框架的中間件注冊(cè)到消息處理管道中。


using Microsoft.AspNetCore.Builder;

using Microsoft.Extensions.DependencyInjection;

    

    public class Startup

    {

        public void ConfigureServices(IServiceCollection services)

        {

            services.AddMvc();

        }

    

       public void Configure(IApplicationBuilder app)

       {

           app.UseMvc();

       }

   }  


定義Controller


我們?cè)贖omeController中定義了MVC應(yīng)用中唯一的一個(gè)Controller,并按照如下的形式定義了一個(gè)唯一的Action方法。這個(gè)Action方法返回一個(gè)簡(jiǎn)單的字符串“Hello World”,并映射為應(yīng)用的根地址(“/”)


using Microsoft.AspNetCore.Mvc;

    public class HomeController : Controller

    {

        [HttpGet('/')]

        public string Index()

        {

            return 'Hello World';          

        }

    }


步驟三、運(yùn)行程序


RC2提供了一個(gè)非常強(qiáng)大的命令行(dotnet),包括恢復(fù)NuGet包以及編譯執(zhí)行.NET應(yīng)用的相關(guān)操作都可以通過(guò)它來(lái)完成


恢復(fù)NuGet包


我們打開(kāi)命令行工具并切換到應(yīng)用所在的目錄,執(zhí)行dotnet restore命令恢復(fù)在project.json中使用的NuGet包。



編譯執(zhí)行程序


我們直接執(zhí)行dotnet build命令對(duì)整個(gè)應(yīng)用實(shí)施編譯,然后執(zhí)行dotnet run命令啟動(dòng)我們的MVC應(yīng)用。



向HomeController發(fā)起請(qǐng)求


當(dāng)程序啟動(dòng)后,Kestrel服務(wù)器會(huì)利用5000端口對(duì)HTTP請(qǐng)求實(shí)施監(jiān)聽(tīng)。由于定義在HomeController的Action方法Index被映射為應(yīng)用根地址,所以我們利用瀏覽器向該地址發(fā)送請(qǐng)求會(huì)得到這個(gè)Action方法的響應(yīng)結(jié)果。



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多