1. 程式人生 > 其它 >ASP.NET+MVC入門踩坑筆記 (一) 建立專案 專案配置執行 以及簡單的Api搭建

ASP.NET+MVC入門踩坑筆記 (一) 建立專案 專案配置執行 以及簡單的Api搭建

哈嘍各位 我又回來了!

前段時間研究了下ASP.NET,剛開始也是隨便找網上的各種教程來看,但是鑑於本人技術有限,還是走了相當長的一段彎路的.所以我寫下了這篇文章.希望各位剛剛入坑的ASP.NET開發者們能夠少走彎路,專業的開發者也請給予指點,謝謝各位了.

PS:本人沒有系統地學過ASP.NET(因為我是學生黨55555)以及.NET知識,也是通過探索略知一二,文中可能不準確的表達和術語,懇請大佬們指正.

好了 正片開始嘍

#1 從建立專案說起

閱讀本章節 , 你將瞭解到 :

-如何在VS配置ASP.NET環境

-如何建立一個基本的ASP.NET專案

如果各位學習過 C# , 就一定知道 VS 是什麼東西,即 Visual Studio , 本機演示版本為 2022 . ASP.NET 要求微軟提供的 .NET Core 框架與 SDK . 你可以直接在 Visual Studio Installer 裡面找到 ASP.NET 和 Web 開發 , 直接勾選它們並且安裝即可 .

下載安裝後 , 你就可以在"建立新專案"時找到 ASP.NET模板了.

我們這裡使用 MVC Api 框架 , 所以選擇 ASP.NET Core Web Api .

如果你正在使用 vs2019 , 那麼你需要建立的是 ASP.NET Core 應用程式 , 並且在建立專案後彈出的對話方塊內選擇 Api .

(當然 , 如果你要選擇另一個帶有 MVC 的也可以)

框架版本什麼的可以自己選 , 個人喜歡 .NET 3.1 Core . 當然 , 如果你要用頂級語句等高版本 C# 才支援的功能 , 那麼 .NET 6.0 請.

配置 HTTPS 的話視具體情況而定 . 個人喜歡關掉 .

萬事俱備以後 , 點選"建立" , 一個新的 ASP.NET 專案就 duang 的一下誕生了 !

#2 配置偵錯程式 , 以及編譯/執行檔案方面的說明

閱讀本章節 , 你將瞭解到 :

-如何使用命令列除錯ASP.NET應用程式

-如何啟動ASP.NET應用程式

-如何允許外網訪問Api

關於除錯 :

大家可能已經看到 , VS2019 與 VS2022 對 ASP.NET 專案的預設除錯配置是 "IIS Express". 這確實是微軟所推薦的除錯 ASP.NET 應用程式的最佳選項 , 但是經過一段時間的使用 , 我的感受只能用三個字來概括 : "糟透了" .

首先 IIS Express 預設是不提供命令視窗的 , 這意味著你無法檢視你的程式用 Console.WriteLine() 所輸出的日誌 .

其次 , IIS Express 對效能並不友好 . 本人使用的是渣機 , 因此不知道中高階機器的 IIS Express 是否也受到此問題的困擾 : 點選除錯以後 , IIS Express 和瀏覽器視窗確實第一時間啟動了 , 但是從它開始啟動到能夠正常除錯 , 幾乎需要載入兩分鐘 ! 而如果直接雙擊生成的 exe 檔案執行 , 從啟動到服務狀態只需要5秒左右 .

最後 , 也是我放棄 IIS Express 的原因 , 我有一次使用 IIS Express 除錯時 , 發現無法啟動 IIS Express 了 , 並且給了我一個報錯 : "嘗試啟動 IIS Express時出現以下問題" . 沒錯 , 就那麼一個提示框 , 上面也只有這麼幾個字 . 至於它所說的 "以下問題" , 我這輩子可能都不會知道了 . 儘管重灌系統後發現這個問題解決了 , 但是我已經對其產生了牴觸 .

好了 , 說了那麼多 , 接下來就講講如何將除錯程式設定為直接啟動 exe 程式吧 . (喜歡IIS Express的同志們忽略即可)

首先我們點選除錯框右側的箭頭 , 展開除錯選單 . 然後點選 "[專案名稱] 除錯屬性" 進入配置檔案編輯頁面.如下圖

接著 , 新建一個 "專案" 型別的配置檔案 , 命名可以隨意 (社交牛逼症狂喜) .


而後 , 將頁面滾動到下側 , 勾選 "啟動瀏覽器" 並將 URL 修改為 http://localhost:5000 . 如下圖

(關於為什麼使用 5000 埠 : IIS Express 所指定的埠並不是 5000 , 但是如果你使用命令列方式啟動編譯後的程式 , 其預設分配的埠即是 5000 埠 (Now listening on localhost:5000) .

如果 5000 埠被佔用了 , 可以設定命令列引數 "-urls http://*:[可用的埠號]" , 埠號可以視具體情況而定 . 下面的啟動瀏覽器 URL 中的埠號也要一起改 . )

最後 , 如下圖 , 在配置檔案選單選擇剛剛建立的配置檔案 , 就可以通過快捷按鈕啟動命令列方式的除錯啦 !

關於編譯出來的程式 :

大家可能已經試過了 , 除錯時 , 你沒有辦法從區域網內通過 IP+埠的方式訪問正在執行的 Api . 實際編譯出來的程式也是如此 , 初始狀態下只能從 localhost , 也就是本機進行訪問 , 如果你從外部訪問 , 就會出現 "xxx拒絕了我們的連線" . 那麼 , 如何解決這個問題 , 使得來自所有 IP 的裝置來訪問已經編譯完成的 Api 呢 ?

解決方案有很多種 .

其一就是通過 IIS 部署 Api , 這也是比較主流的方式 , 比較適合需要多次更新應用程式以及有一個集中管理後臺的開發者們 . 網上這方面的文章很多 , 但是如果你自己配置 , 並且不太懂 IIS 的執行原理 , 那麼就很有可能配置出錯 (反正我是直接用不了 , 所以就不多介紹這個方法) .

其二就是給 .NET 新增啟動引數 , 這裡著重介紹一下 .

首先把你的整個編譯後輸出的資料夾拷貝到你的伺服器上 (本地開啟也可以) , 然後檢查你的 .NET 版本 . 特別要注意 , 伺服器上要預先安裝好與專案目標平臺的 .NET Core for Servers.

然後用 cmd 定位到目錄下 , 執行

dotnet [專案名稱].dll --urls http://*:[埠號]

比方說我的專案的 dll 檔案是 project.dll , 檔案位於 C:\wwwroot\project.dll , 需要部署到 5000 埠 , 那麼我就應該執行

cd C:\wwwroot\
dotnet project.dll --urls http://*:5000

當然你如果嫌這樣太麻煩 , 你也可以寫一個 cmd 指令碼 (批處理檔案) 來執行命令 .

如下圖 , 出現了執行提示 , 就是成功了 .

如果你發現報錯 "'dotnet' 不是內部或外部命令,也不是可執行的程式或批處理檔案。" 或者是一個帶連結的執行庫錯誤 , 那麼需要去微軟官網下載對應版本的 .NET Core 執行庫 , 記得一堆要下載伺服器 (Server) 版本的 , 就是旁邊帶 "Run Server Apps" 的包 .

微軟 .NET 官網 : 點選前往

#3 配置 API 路由 , 建立不帶引數的 GET 方法

閱讀本章節 , 你將瞭解到 :

-如何配置ASP.NET MVC路徑

-如何建立基本的ASP.NET介面

-如何通過瀏覽器除錯基礎的ASP.NET專案

-控制器(Controller)該如何使用

專案建立好了 , 接下來就是開始敲程式碼咯 (激動) .

來到 VS 右側的解決方案資源管理器 , 展開 Controllers資料夾 , 這裡用於存放你的 Api 控制器 , 藉助控制器 , 你才能通過類似 localhost:5000/api/core/method 的 URL 訪問到你的 Api 方法 . 在以上鍊接中 , core 就是你的控制器名稱 , 而後面的 Method 則是方法名稱 .

控制器檔案的名稱以及檔案內控制器的名稱可以隨意更改 , 建議二者保持一致 .

另外 , 這裡要特殊強調的是 , 控制器名稱末尾必須帶有 Controller 字樣 . 並且應當新增繼承 ":ControllerBase" , 如下圖所示 .

其中 , Api 是控制器名稱 .

當然你可能也注意到了 , 在控制器上面還有一行 Route 程式碼 , 這也就是我們所說的路由設定 .

那麼什麼是路由設定呢 ? 舉這樣一個例子 : 假如控制器 Api 下有一個 Index() 方法 , 如下所示設定路由

[ApiController]
[Route("[controller]/[action]")]
public class ApiController : ControllerBase
    {
        [HttpGet]
        public ActionResult<string> Index()
        {
            return "Hello world!";
        }
    }

此時 , 路由就是 [controller]/[action] . 假使應用程式在 localhost:5000 執行 , 請問 , 我該如何訪問 Index() 方法並得到返回值 "Hello world!" 呢 ? (無獎競猜)

沒錯 , 我們應該訪問 localhost:5000/Api/Index

值得一提的是 , 控制器以及後面要講的引數和原生 C# 不同 , 它們對大小寫不敏感 , 例如 Api 和 api 在實際上是同一個控制器 , 而以下寫法:

localhost:5000/api/Index

localhost:5000/Api/Index

localhost:5000/Api/index

localhost:5000/api/index

對於 ASP.NET 控制器而言 , 這些寫法指向的控制器以及方法都是一致的 , 都是位於 Api 或 api 控制器下的 Index() 或 index() 方法.

我們再次設定路由 , 如下 :

[ApiController]
    [Route("api/[controller]/[action]")]
    public class ApiController : ControllerBase
    {
        [HttpGet]
        public ActionResult<string> Index()
        {
            return "Hello world!";
        }
    }

好了 , 這次你知道應該如何訪問 Index() 方法了嗎 ?

正解 : localhost:5000/api/Api/Index

如上 , 前面的一個 api 是既定的路徑 , 後面的 Api 代表 Api 控制器 , 而 Index() 表示該控制器下的 Index() 方法 .

return 語句在這裡就是返回值 , 即顯示在瀏覽器上的資訊 .

[HttpGet] 語句定義了 Index() 是一個 GET 型別的 HTTP 協議 Api

同理 , 我們來製作一個簡單的用於獲取時間的 Api .

using System;
using Microsoft.AspNetCore.Mvc;//MVC框架

namespace ApiDemo.Controllers
{
    [ApiController]//宣告控制器
    [Route("api/[controller]/[action]")]//設定路由
    public class ApiController : ControllerBase//定義Api控制器
    {
        [HttpGet]//使用GET HTTP方法
        public ActionResult<string> GetTime()//定義方法
        {
            return DateTime.Now.ToString();//呼叫System.DateTime.Now獲取當前時間並輸出
        }
    }
}

到此為止 , 一個簡單的 ASP.NET 應用程式就製作完成啦 .

我們嘗試執行一下 .

成功了 !

#4 預告

下篇文章中 , 我們會談到 :

-如何建立帶引數的 Api

-如何搭建 POST Api 並且接收發送過來的值

-如何在 ASP.NET 程式中連線 MySQL 資料庫並且執行操作

(雖然也不知道什麼時候才會更)