ASP.NET Core 入門教程 2、使用ASP.NET Core MVC框架構建Web應用

来源:https://www.cnblogs.com/ken-io/archive/2018/09/21/aspnet-core-tutorial-mvc-quickstart.html
-Advertisement-
Play Games

一、前言 1、本文主要內容 使用dotnet cli創建基於解決方案(sln+csproj)的項目 使用Visual Studio Code開發基於解決方案(sln+csproj)的項目 Visual Studio Code Solution插件( vscode-solution-explorer) ...


一、前言

1、本文主要內容

  • 使用dotnet cli創建基於解決方案(sln+csproj)的項目
  • 使用Visual Studio Code開發基於解決方案(sln+csproj)的項目
  • Visual Studio Code Solution插件( vscode-solution-explorer)基礎使用介紹
  • 基於 .NET Core web項目模板構建 ASP.NET Core MVC Web應用
  • ASP.NET Core MVC框架上手

2、本教程環境信息

軟體/環境說明
操作系統 Windows 10
SDK 2.1.401
ASP.NET Core 2.1.3
IDE Visual Studio Code 1.27
瀏覽器 Chrome 69

3、前置知識

你可能需要的前置知識

  • MVC框架/模式介紹

https://baike.baidu.com/item/mvc

  • 控制反轉(IOC)原則與依賴註入(DI)

ASP.NET Core 預設集成了DI。所有官方模塊的引入都要使用DI的方式引入。

https://baike.baidu.com/item/IOC

二、項目準備

1、項目創建

.NET平臺的項目構建有兩個概念:解決方案(Solution)、項目(Project)。
所有的項目開發,不論是Web項目,還是控制台應用程式,都必須基於Project來構建。而Solution的作用就是把Project組織起來

如果項目簡單,我們只需要基於Project來構建項目即可,但是當項目需要分層解耦時,我們如果在Project創建目錄來隔離並不能起到硬性隔離的作用,畢竟只要在一個Project中就可以引用。而通過Project來分層就可以做到硬性隔離的效果。而且基於Project的代碼復用更簡潔合理(編譯產出.dll可以在其他項目中引用等)

解決方案(Solution)+ 項目(Project)就相當於用Maven構建的Java項目中,頂層Project和Project的關係。

  • 創建項目目錄
#創建項目目錄
mkdir Ken.Tutorial

#進入項目目錄
cd Ken.Tutorial
  • 創建解決方案文件
dotnet new sln -n Ken.Tutorial
  • 創建Web項目
dotnet new web -n Ken.Tutorial.Web
  • 將項目添加到解決方案中
dotnet sln add Ken.Tutorial.Web

2、VS Code 配置

  • 安裝基於Solution開發 .NET Core 項目的擴展
擴展名說明
vscode-solution-explorer 創建、刪除、重命名或移動解決方案、解決方案文件夾和項目。管理項目引用。

VS Code 擴展管理頁直接搜索擴展名安裝即可,本次安裝的版本是:0.2.33

三、VS Code開發基於解決方案的項目說明

1、VS Code項目配置

菜單:文件->打開文件夾,選擇項目目錄打開項目

因為已經安裝了VS Code的C#擴展和Solution擴展,所以也會提示缺失相關配置

C#擴展提示:

Required assets to build and debug are missing from ‘helloweb’. Add them?

ASP.NET Core 入門教程

這是因為項目缺少編譯、調試配置,選擇Yes即可

vscode-solution-explorer擴展提示:

Would you like to create the vscode-solution-explorer templates folder?

ASP.NET Core 入門教程

這是因為vscode-solution-explorer插件需要項目中的解決方案提供相應的模板。

所有插件預設的配置文件,都會放在.vscode文件夾中

ASP.NET Core 入門教程

資源管理器中除了預設的面板,我們安裝的Solution插件還會提供友好的Solution Explorer。這個視圖的風格,有VS(Visual Studio)的既視感。
後續項目開發完全可以隱藏預設資源管理器,使用Solution Explorer就好。

2、Solution Explorer菜單介紹

  • Solution滑鼠右鍵菜單介紹

ASP.NET Core 入門教程

菜單快捷鍵說明
Add existing project / 添加已存在的項目(Project)
Add new project / 新建項目(Project)
Create folder Ctrl+Shift+F 創建文件夾
Open File / 打開解決方案文件(.sln)
Rename F2 修改解決方案名稱
Build / 編譯解決方案(Solution)
Clean / 清理解決方案(Solution)的編譯輸出
Pack / 解決方案(Solution)打包
Publish / 發佈解決方案(Solution)
Restore / 恢復解決方案(Solution)
Test / 執行解決方案(Solution)中的單元測試
  • Project滑鼠右鍵菜單介紹

ASP.NET Core 入門教程

菜單快捷鍵說明
Add package / 添加package
Add reference / 引用解決方案中的其他項目
Create file Ctrl+Shift+A 創建文件
Create folder Ctrl+Shift+F 創建文件夾
Move / 移動項目(Project)
Remove project from solution Del 從解決方案中移除項目(Project)
Paste Ctrl+V 粘貼
Open File / 打開項目文件(.csproj)
Rename F2 修改解決方案名稱
Build / 編譯項目(Project)
Clean / 清理項目(Project)的編譯輸出
Pack / 項目(Project)打包
Publish / 發佈項目(Project)
Restore / 恢復項目(Project)
Test / 執行項目(Project)中的單元測試

四、ASP.NET Core MVC 輸出HelloWorld

1、引入 ASP.NET Core MVC

修改應用啟動類(Startup.cs),引入MVC模塊並配置預設路由

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        //引入MVC模塊
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc(routes =>
        {
            //配置預設路由
            routes.MapRoute(
                name: "Default",
                template: "{controller}/{action}",
                defaults: new { controller = "Home", action = "Index" }
            );
        });
    }
}

2、創建Controller與Action

  • 創建HomeController

在Ken.Tutorial.Web項目中添加文件夾:Controllers,併在文件夾中創建類HomeController類型選擇為:class

using System;

namespace Ken.Tutorial.Web.Controllers
{
    public class HomeController
    {
    }
}
  • 引用MVC命名空間,並繼承與Controller
using System;
using Microsoft.AspNetCore.Mvc;

namespace Ken.Tutorial.Web.Controllers
{
    public class HomeController : Controller
    {
    }
}

ControllerName=Home

  • 定義Action:Index
using System;
using Microsoft.AspNetCore.Mvc;

namespace Ken.Tutorial.Web.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return Content("Hello World!");
        }
    }
}

ActionName=Index

3、項目啟動與訪問測試

  • 修改協議與埠

修改Ken.Tutorial.Web項目Properties文件夾中launchSettings.json文件,使用HTTP協議並監聽埠5001

"Ken.Tutorial.Web": {
  "commandName": "Project",
  "launchBrowser": true,
  "applicationUrl": "http://localhost:5001",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
  • 啟動項目

按下F5啟動項目,項目啟動成功後,VS Code會幫我們打開預設瀏覽器並訪問:http://localhost:5001

ASP.NET Core 入門教程

之所以顯示HomeController中Index(Action)的返回內容,是因為我們前面定義了預設路由可以從{controller}/{action}訪問路徑對應Action,而我們又定義了預設值:
controller = "Home", action = "Index"

routes.MapRoute(
    name: "Default",
    template: "{controller}/{action}",
    defaults: new { controller = "Home", action = "Index" }
);

我們也可以通過http://localhost:5001/home/index顯示訪問

五、ASP.NET Core 視圖基礎使用

1、創建返回View的Action

HomeController添加Action:Time

public IActionResult Time()
{
    //將當前伺服器時間放入ViewBag中
    ViewBag.ServerTime = DateTime.Now;
    return View("Time");
}

2、創建視圖文件

在項目中創建文件夾 Views,並創建對應的HomeController視圖子文件夾:Home
之所以這樣創建文件夾,是因為當我們返回視圖時,只指定ViewName,而不指定完整的路徑。ASP.NET Core MVC框架會預設在以下項目目錄中依次讀取視圖文件:

  • /Views/{ControllerName}
  • /Views/Shared
  • /Pages/Shared

如果找到視圖文件便會渲染視圖,如果沒找到便會拋出異常。

創建視圖文件 /Views/Home/Time.cshtml

@ViewBag.ServerTime  -ken.io

視圖渲染時@ ViewBag.ServerTime會輸出Action中賦值的內容,
-ken.io會被作為字元串渲染

3、啟動項目測試

按下F5啟動項目,項目啟動成功後在瀏覽器中輸入http://localhost:5001/home/time並訪問,將會看到以下輸出:

ASP.NET Core 入門教程

六、備註

1、附錄

  • 本文代碼示例

https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02

 


本文首發於我的獨立博客:https://ken.io/note/asp.net-core-tutorial-mvc-quickstart

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分散式架構有以下幾點普適性的共性需求: 1. 提供集群的集中化的配置管理功能,可以不重啟就讓新的配置參數生效,類似與配置中心 2. 簡單可靠的集群節點動態發現機制,便於動態發現服務,動態擴展節點 3. 簡單可靠的leader選舉機制 4. 提供分散式鎖 zookeeper的數據結構整體上可以看作一顆 ...
  • 在前面大致預覽了常用變數的結構之後,我們今天來仔細的剖析一下字元串的具體實現。 一、字元串的結構 zend_refcounted_h對應的結構體: 下麵我們來瞭解一下具體每個成員的作用: gc:就是_zend_refcounted_h結構體,主要作用是引用計數以及標記變數的類別。 h:字元串的哈希值 ...
  • 前言 並行編程:通過編碼方式利用多核或多處理器稱為並行編程,多線程概念的一個子集。 並行處理:把正在執行的大量的任務分割成小塊,分配給多個同時運行的線程。多線程的一種。 並行編程分為如下幾個結構: 1.並行的LINQ或PLINQ 2.Parallel類 3.任務並行結構 4.併發集合 5.SpinL ...
  • 前言 本章講述正確添加語言資源的方式,以及一段語言資源的多種樣式顯示。 例如:“@Winter,你好!感謝已使用軟體 800 天!” 在添加如上多語言資源項時,“XX,你好!感謝已使用軟體 X 天!” 那麼,你是怎麼添加語言資源的呢? 分別添加,“,你好!”、“感謝已使用軟體”、“年”3個,再通過界 ...
  • 錯誤 無法安裝程式包“MiniProfiler.EF6 4.0.138”。你正在嘗試將此程式包安裝到目標為“.NETFramework,Version=v4.5.2”的項目中, 但該程式包不包含任何與該框架相容的程式集引用或內容文件。有關詳細信息,請聯繫程式包作者。 產生這個錯誤的原因主要是.net ...
  • 情景:公司項目基於.net4.0,web客戶端實現單點登錄需要自己解密id_token,對於jwt解密,.net提供了IdentityModel類庫,但是4.0中該類庫不可用,所以自己實現瞭解密方法.. 使用了類庫:https://github.com/jwt-dotnet/jwt 下麵直接貼代碼, ...
  • 樂觀併發的解決方案有以下三種: 1) 可以跟蹤用戶已修改的屬性,並僅更新資料庫中相應的列。 2) 可讓後提交的用戶更改覆蓋之前用戶提交的更改。 3) 可以阻止在資料庫中更新後一用戶提交的更改。 ...
  • 創建xml對應的對象類 根節點,對應類名 [XmlRoot("ComponentLog ")] public class ComponentLog{ } 其他節點,對應屬性名 [XmlElement("LogCategory")] public string logCategory { get; s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...