建立 vscode asp.net core vue3 的整合型專案 - daniel-qa/RooCode GitHub Wiki
(ASP.NET Core + Vue 3 + UseProxyToSpaDevelopmentServer)就是目前最穩、最主流的「可以同時 Debug 前後端」的整合方式之一。
我們來一步一步完成它,這邊的方案是「前後端分離」,但由 ASP.NET Core 負責 serve Vue 應用與 API」,而不是完全獨立部署兩個伺服器。
- 專案架構概覽
MyProject/
├── ClientApp/ ← Vue 3 前端應用
├── Controllers/ ← ASP.NET Core Web API 控制器
├── Program.cs
├── Startup.cs
└── MyProject.csproj
dotnet new webapi -n MyProject
cd MyProject
dotnet new list 查到的範本名稱
範本名稱 簡短名稱 語言 標記
------------------------------------------------- -------------------------- ---------- ----------------------------------
ASP.NET Core Web API webapi [C#],F# Web/Web API/API/Service
前端 (Frontend) 資料夾一般會命名為 ClientApp
npm create vue@latest ClientApp
# 選擇:
# - Project name: ClientApp
# - Add TypeScript? ➝ 自選
# - Add ESLint / Router / Pinia ➝ 依需求
cd ClientApp
npm install
npm create vue@latest 是一個用於快速建立和設定一個新的 Vue.js 專案的指令。
在 MyProject.csproj 中加入:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="7.0.0" />
</ItemGroup>
然後執行:
dotnet restore
假設是 .NET 6 以上,編輯 Program.cs:
可以用原有版本,去問 GPT 要新增內容
var builder = WebApplication.CreateBuilder(args);
// 加入靜態檔案服務(給 Vue)
builder.Services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
// 開發用 Swagger / OpenAPI
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Swagger 用於開發時
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
// redirect HTTPS
app.UseHttpsRedirection();
// 若不是開發模式,用來 serve Vue build 的靜態檔案
if (!app.Environment.IsDevelopment())
{
app.UseSpaStaticFiles();
}
// === 後端 API ===
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", () =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
(
DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
Random.Shared.Next(-20, 55),
summaries[Random.Shared.Next(summaries.Length)]
))
.ToArray();
return forecast;
})
.WithName("GetWeatherForecast");
// === Vue 3 前端 ===
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (app.Environment.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://localhost:5173");
}
});
app.Run();
record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
// https://vite.dev/config/
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'https://localhost:5001', // 根據你的後端 port 調整
changeOrigin: true,
secure: false,
}
}
},
plugins: [
vue(),
vueDevTools(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
},
},
})
開一個 terminal,執行 ASP.NET Core: (後端)
dotnet run
再開一個 terminal,進入 ClientApp: (前端)
npm run dev
此時:
http://localhost:5173/ 是 Vue App
Vue 發送 /api 請求會 proxy 到 ASP.NET Core
cd ClientApp
npm run build
cd ..
dotnet publish -c Release
然後你可以用 IIS、Docker 或 Azure 部署整個應用。
-
用 VS Code 的 launch.json 和 tasks.json 組合起來,就可以做到 一鍵啟動前後端(ASP.NET Core + Vue 3) 的整合式開發體驗。
-
概念說明
tasks.json:定義要執行的命令(如:dotnet run、npm run dev)
launch.json:定義除錯設定,可以同時啟動多個 task
建立 .vscode/tasks.json(如果還沒的話):
{
"version": "2.0.0",
"tasks": [
{
"label": "run-backend",
"type": "process",
"command": "dotnet",
"args": ["run"],
"problemMatcher": "$msCompile",
"group": "build",
"cwd": "${workspaceFolder}",
"presentation": {
"reveal": "silent"
}
},
{
"label": "run-frontend",
"type": "process",
"command": "npm",
"args": ["run", "dev"],
"problemMatcher": [],
"group": "build",
"cwd": "${workspaceFolder}/ClientApp",
"presentation": {
"reveal": "silent"
}
}
]
}
建立或修改 .vscode/launch.json:
{
"version": "0.2.0",
"compounds": [
{
"name": "Debug All",
"configurations": ["ASP.NET Core", "Vue Dev Server"]
}
],
"configurations": [
{
"name": "ASP.NET Core",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "run-backend",
"program": "${workspaceFolder}/bin/Debug/net8.0/MyProject.dll",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
{
"name": "Vue Dev Server",
"type": "node-terminal",
"request": "launch",
"command": "npm run dev",
"cwd": "${workspaceFolder}/ClientApp"
}
]
}
- 記得:
"program" 要換成你實際輸出的 DLL 路徑(可用 dotnet build 查)
ClientApp 是前端資料夾名稱,如果不同就換掉
✅ 使用方式
打開左側「執行與除錯」面板,選擇 Debug All,按下綠色播放鍵
啟動 ASP.NET Core
啟動 Vue 開發伺服器
可同時斷點前後端
- tasks.json
tasks.json:這個檔案定義了 VS Code 任務,告訴 VS Code 該如何啟動和管理前端、後端、或其他的程式執行。
每個任務都有一個 label,用來區分任務的名稱。
在這裡,run-frontend 就是我們為啟動前端所設定的任務名稱。
tasks.json 裡,run-frontend 代表的任務是:
{
"label": "run-frontend",
"type": "process",
"command": "npm",
"args": ["run", "dev"],
"problemMatcher": [],
"group": "build",
"presentation": {
"reveal": "silent"
},
"options": {
"cwd": "${workspaceFolder}/ClientApp"
}
}
label:任務名稱,這裡是 run-frontend,用來識別這個任務。
type:這裡是 process,表示執行一個命令行程式。
command:執行的命令,這裡是 npm,用來運行 Node.js 的包管理器。
args:傳遞給 npm 的參數,這裡是 run dev,用來啟動 Vue 3 的開發模式。
options.cwd:定義了執行命令時的當前工作目錄,這裡設置為 ${workspaceFolder}/ClientApp,這樣 VS Code 就會在 ClientApp 資料夾內執行 npm run dev。
當你執行這個任務時,VS Code 會在 ClientApp 目錄下運行 Vue 前端應用程式的開發伺服器。
這是 tasks.json 裡的一個設定,並且可以與其他任務(如後端的 run-backend 任務)配合使用,實現一鍵啟動前後端開發環境的功能。