【ASP.NET Core】- 搭建MVC框架


1、使用最新版本的VS2017,並安裝.NET Core2.0中相關開發工具

1
 

 

2、打開VS2017,點擊文件-新建-項目,選擇.NET Core中的ASP.NET Core Web 應用程序

 

2
 

 

3、由於我們是從零開始搭建MVC框架,因此我們選擇創建一個空模板

 

3
 

 

4、創建完后,我們可以看到初始文件里面有這么幾個文件

 

4
 

內部文件簡介:

Properties&launchSettings.json 是一個啟動配置文件,其用於應用的啟動准備工作,包括環境變量,開發端口等。

wwwroot是一個用於存放靜態內容的文件夾(例如存放css、js、圖片等文件)。

我們可以通過依賴項安裝各種依賴(如NuGet、等)。

至於Program.cs和Startup.cs等下我們再講

5、編寫Program.cs

public class Program
{
    public static void Main(string[] Args)
    {
        BuildWebHost(Args).Run();
    }//void Main(string[] Args)

    public static IWebHost BuildWebHost(string[] Args)
    {
        return WebHost.CreateDefaultBuilder(Args).UseStartup<Startup>().Build();
    }//IWebHost BuildWebHost(string[] Args)

}//class Program
 

ASP.NET Core是通過一個控制台應用來創建一個Web應用,其中Program類是項目的啟動項,其會為我們創建並初始化Web應用,並通過Startup類中的ConfigureServices和Configure方法,完成依賴注入和中間件管道的搭建。

備注:1、請切勿將WebHost.CreateDefaultBuilder(Args).UseStartup().Build()方法直接寫到Main方法內,否則將無法使用ADO.NET Entity Framework中的遷移指令;

6、初步編寫Startup.cs

public class Startup
{

    public void ConfigureServices(IServiceCollection ServiceCollection)
    {

    }//void ConfigureServices(IServiceCollection ServiceCollection)

    public void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)
    {

    }//void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)

}//class Startup
 

Startup類是ASP.NET Core中初始化時最重要的設置類,我們可以在其ConfigureServices方法中注冊所需的Service以此完成依賴注入,同時可以在Configure中注冊所需的中間件以此完成管道的搭建。

備注:1、Configure的方法參數中必需含有IApplicationBuilder接口,而至於其他的接口或Service必須在ConfigureServices方法中注冊后才能添加;2、ASP.NET Core默認會為我們注冊一些Service,例如IHostingEnvironment、ILoggerFactory等;

7、創建Controllers、Models、Views

 

7
 

 

8、在Views文件夾中添加_Layout.cshtml

<!DOCTYPE html>
<html lang="zh-CN">
<head>
</head>
<body>
    <div>
        @RenderBody()
    </div>
</body>
</html>
 

選擇Views文件夾,右鍵-添加-新建項,選擇MVC視圖頁,添加_Layout.cshtml文件,該文件將被作為一個母版頁。當然我們也可以在其中添加其他相應的標簽。

其中RenderBody的方法會渲染其他子Views中的內容。

備注:1、在布局頁面也有節的概念,如果需要使用,則需使用RenderSection方法;

9、在Views文件夾中添加_ViewStart.cshtml

@{
    Layout = "~/Views/_Layout.cshtml";
}
 

選擇Views文件夾,右鍵-添加-新建項,選擇MVC視圖頁,添加_ViewStart.cshtml文件。該文件必需添加在Views目錄下,且必需為_ViewStart.cshtml,這是被微軟的MVC框架中寫死的(實際上也可以修改,只是比較麻煩)。

_ViewStart.cshtml是MVC框架中View的啟動文件,這是MVC框架中必需要有的,我們可以在這里指定母版頁_Layout.cshtml的路徑。

10、在Views文件夾中添加_ViewImports.cshtml

@using SinDynasty
@using SinDynasty.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
 

選擇Views文件夾,右鍵-添加-新建項,選擇MVC視圖頁,添加_ViewImports.cshtml文件。由於我們在View中使用的是Razor語法,在使用Razor語法時,我們就可能會引用一些C#代碼,這時我們就需要聲明這些C#代碼中所引用到的命名空間、類。為了方便,我們可以在_ViewImports.cshtml文件中對某些命名空間進行引用,這樣我們就不必對每個View都引用一遍相同的命名空間了。

11、在Controllers文件夾下創建HomeController.cs

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }//IActionResult Index()

}//class HomeController : Controller

選擇Controllers文件夾,右鍵-添加-新建項,選擇MVC控制器類,添加HomeController.cs。

所有的Controller都應該以Controller結尾,且必須都繼承Controller。其中View方法將返回一個ViewResult,MVC將通過這個ViewResult來顯示相應的View。View方法有多個重載,在示例里使用了無參數的重載,其將會顯示View/Controller名稱的簡寫/方法名.cshtml。

備注:1、所有的Controller都必須為public

12、在Models文件夾下創建HomeModel.cs

public class HomeModel
{

}//class HomeModel

選擇Models文件夾,右鍵-添加-新建項,選擇類,添加HomeModel.cs。

備注:1、在這個簡單示例中,並不需要Model,在這兒寫只是說明如何去創建Models;2、所有的Model都必須為public,否則將無法在View中引用;

13、在Views目錄下創建HomeController中的Index視圖。

<h1>
    Hello,World!!!
</h1>

選擇Views文件夾,右鍵-添加-新建文件夾,從而創建出一個Home文件夾,然后選擇Home文件夾,右鍵-添加-新建項,選擇MVC視圖頁,添加Index.cshtml文件。

14、注冊MVC服務

public void ConfigureServices(IServiceCollection ServiceCollection)
{
    ServiceCollection.AddMvc();
}//void ConfigureServices(IServiceCollection ServiceCollection)

在Startup類中的ConfigureServices方法中,調用MvcServiceCollectionExtensions類里的AddMvc方法(AddMvc方法是IServiceCollection的一個拓展方法,具體的等以后將ASP.NET Core中的依賴注入時再講)。

15、注冊MVC中間件,並配置路由規則

public void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)
{
    ApplicationBuilder.UseMvc((RouteBuilder)=> { RouteBuilder.MapRoute("SinDynasty", "{Controller}/{Action}/{Parameter}", new { @Controller = "Home", @Action = "Index", @Parameter = String.Empty }); });
}//void Configure(IApplicationBuilder ApplicationBuilder, IHostingEnvironment HostingEnvironment)

注冊MVC中間件時,我們調用的是MvcApplicationBuilderExtensions類中的IApplicationBuilder的拓展方法UseMvc方法。由於我們創建的是一個完整的Web應用,而不是一個WebAPI,因此我們還需要配置相應的路由規則。

在UseMvc方法中有一個可以帶有Action的重載方法,我們可以在該Action上進行路由規則的配置。

Action在這里我們使用一個Lambda表達式(RouteBuilder)=>{ }來表示。RouteBuilder表示的是一個IRouteBuilder接口。

配置路由規則,我們可以調用MapRouteRouteBuilderExtensions類中的IRouteBuilder的拓展方法MapRoute來進行。

MapRoute也有多個重載,在這里我所用的重載的第一個參數表示的是路由規則的名稱,第二個參數表示的是路由規則,第三個參數表示的是初始默認的路由規則。

參數1:由於我們可以有多個路由規則,因此我們需要對這些路由規則加以命名已做區分;

參數2:表示的是一個路由規則,在這里我使用的規則是“Controller名稱的簡寫/方法名/路由參數”;

參數3:表示的是初始默認的路由,在這里我設置的初始路由就是"Home/Index/",在這里使用了一個匿名類來表示;

16、這樣我們就創建並搭建完畢了


免責聲明!

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



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