在B/S系統開發中,前後端分離開發設計已成為一種標準,而VUE作為前端三大主流框架之一,越來越受到大家的青睞,Antdv是Antd在Vue中的實現。本系列文章主要通過Antdv和Asp.net WebApi開發學生信息管理系統,簡述前後端分離開發的主要相關內容,僅供學習分享使用,如有不足之處,還請指... ...
在B/S系統開發中,前後端分離開發設計已成為一種標準,而VUE作為前端三大主流框架之一,越來越受到大家的青睞,Antdv是Antd在Vue中的實現。本系列文章主要通過Antdv和Asp.net WebApi開發學生信息管理系統,簡述前後端分離開發的主要相關內容,僅供學習分享使用,如有不足之處,還請指正。
在本示例項目中,主要包含兩大部分:1.前端web項目【vsims.web】2.後端webapi項目【vsims.webapi】,經過前一篇文章的講解,已經對前端項目的架構和組成部分有了大致瞭解,今天繼續開發後端webapi項目的開發講解。
涉及知識點
在本示例中,涉及知識點包含前端和後端兩部分:
前端項目涉及知識點如下:
- 開發工具:HbuilderX
- 項目框架:VUE3.0+Antdv
後端項目涉及知識點如下:
- 開發工具:Visual Studio 2022
- 項目類型:Asp.net WebApi
- 資料庫:SQL Server 2012
資料庫表結構
在學生信息管理系統中,學生,班級,課程,成績等內容和管理模塊的相關內容,都離不開資料庫的支持,所以數據是支撐,頁面是對數據的展示。根據系統功能設計,對應資料庫如下所示:
關於具體表結構說明,之前已有說明,本文不再贅述,可參考文章:WPF開發學生信息管理系統【WPF+Prism+MAH+WebApi】(二)
創建WebApi項目
在VS2022中文件--新建,打開創建新項目視窗,然後選擇【ASP.NET Core Web API】項目類型,點擊下一步,如下所示:
在配置新項目頁面,輸入項目名稱,和保存位置,點擊下一步,如下所示:
選擇項目對應框架,預設.NET 6.0
資料庫實體類
項目創建成功後,添加資料庫表對應的實體類,如下圖所示:
添加第三方框架
本示例中所需要的第三方框架主要有三個,如下所示:
- EntityFramework框架主要用於操作資料庫,是微軟提供的通過ORM方式操作數據的框架。
- Autofac框架,主要用於類的依賴註入的自動實現。
- Swagger框架,主要用於WebApi在瀏覽器端的可視化展示。
第三方框架主要通過Nuget包進行安裝,如下所示:
創建WebApi介面
在Asp.net WebApi項目中,採用三層架構的方式進行開發介面,如下所示:
關於具體實現類的代碼,之前已有說明,本文不在贅述,可參考文章:WPF開發學生信息管理系統【WPF+Prism+MAH+WebApi】(二)
配置介面
在上述介面開發完成後,需要配置註入DataCotext和Autofac等內容,如下所示:
1 using Autofac; 2 using Autofac.Extensions.DependencyInjection; 3 using Microsoft.EntityFrameworkCore; 4 using VSIMS.WebApi; 5 using VSIMS.WebApi.Data; 6 using VSIMS.WebApi.Services.Student; 7 using System.Configuration; 8 using System.Reflection; 9 10 var builder = WebApplication.CreateBuilder(args); 11 12 // Add services to the container. 13 14 builder.Services.AddControllers(); 15 // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle 16 builder.Services.AddEndpointsApiExplorer(); 17 builder.Services.AddSwaggerGen(); 18 builder.Services.AddDbContext<DataContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("Default"))); 19 // 以下是autofac依賴註入 20 builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()); 21 builder.Host.ConfigureContainer<ContainerBuilder>(builder => 22 { // 註入Service程式集 23 string assemblyName = Assembly.GetExecutingAssembly().GetName().Name; 24 builder.RegisterAssemblyTypes(Assembly.Load(assemblyName)) 25 .AsImplementedInterfaces() 26 .InstancePerDependency(); 27 }); 28 var app = builder.Build(); 29 30 // Configure the HTTP request pipeline. 31 if (app.Environment.IsDevelopment()) 32 { 33 app.UseSwagger(); 34 app.UseSwaggerUI(); 35 } 36 37 app.UseHttpsRedirection(); 38 39 app.UseAuthorization(); 40 41 app.MapControllers(); 42 43 app.Run();
運行WebApi介面
在VS中運行程式,如果顯示介面列表,則表示成功。如下所示:
Web前端調用Api
在VUE3.0的前端項目中,如果需要調用WebApi,需要先安裝第三方插件Axios以及vue-axios,安裝命令為:
npm -i --save axios npm -i --save vue-axios
安裝過程,如下圖所示:
配置和封裝Axios
在src目錄下創建api目錄,並創建config.js,配置介面訪問基本地址,如下所示:
1 export default { 2 baseUrl: { 3 dev: "http://localhost:5151/", // 開發環境 4 // fat: 'http://xxx.xx.xx.xx:8080' 5 //uat : "http://production.com" 6 //pro:"http://localhost:8088/" 7 }, 8 };
然後在api目錄下,創建http.js文件,封裝axios訪問,如下所示:
1 import axios from "axios"; // 引用axios 2 import config from "@/api/config"; 3 4 const instance = axios.create({ 5 baseURL: config.baseUrl.dev, 6 timeout: 60000, 7 }); 8 //get請求 9 export function get(url, params = {}) { 10 return new Promise((resolve, reject) => { 11 instance 12 .get(url, { 13 params: params, 14 }) 15 .then((response) => { 16 resolve(response); 17 }) 18 .catch((err) => { 19 reject(err); 20 }); 21 }); 22 } 23 //post請求 24 export function post(url, data = {}) { 25 return new Promise((resolve, reject) => { 26 instance.post(url, data).then( 27 (response) => { 28 resolve(response.data); 29 }, 30 (err) => { 31 reject(err); 32 } 33 ); 34 }); 35 }
然後創建index.js,封裝get和post方法,如下所示:
1 // index.js 調用介面的方法 2 // 引入封裝的get/post請求方法 3 import { 4 get, 5 post 6 } from '@/api/http' 7 8 export const getD = (url, m) => get(url, m) 9 export const postD = (url, m) => post(url, m)
封裝完成後,在LoginView登錄視圖中,調用介面,如下所示:
引入index.js封裝的方法,如下所示:
1 import { getD } from '../api/index.js';
在登錄事件中,調用介面,輸出介面返回信息,如下所示:
1 const onFinish = (values: any) => { 2 console.log(values); 3 console.log('Success:', values); 4 getD('/api/Login/Login',{"username":values.username,"password":values.password}).then(res=> { 5 console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>"); 6 console.log(res); 7 console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>"); 8 router.push('/home'); 9 }) 10 .catch(error=>{ 11 console.log(error) 12 }); 13 //this.$router.push('/home'); 14 };
然後運行程式,輸入用戶名密碼,點擊登錄按鈕,然後提示如下錯誤:
以上錯誤是前端項目和後端WebApi是兩個獨立的項目,不屬於同一個域,所以會報跨域問題。在Vue3.0中,要解決跨域問題,需要在vue.config.js中增加跨域配置。如下所示:
1 const { 2 defineConfig 3 } = require('@vue/cli-service'); 4 const webpack = require('webpack'); 5 module.exports = defineConfig({ 6 css: { 7 loaderOptions: { 8 less: { 9 lessOptions: { 10 modifyVars: { 11 'primary-color': '#1DA57A', 12 'link-color': '#1DA57A', 13 'border-radius-base': '2px', 14 }, 15 javascriptEnabled: true, 16 }, 17 }, 18 }, 19 }, 20 chainWebpack: config => { 21 config 22 .plugin('html') 23 .tap(args => { 24 args[0].title = 'SIMS' 25 return args 26 }) 27 }, 28 transpileDependencies: true, 29 configureWebpack: { 30 devServer: { 31 host:'localhost', 32 port:8080, 33 proxy: { 34 '/api': { // /api是習慣性的寫法,可以隨意改 35 target: 'http://localhost:5151/', //介面功能變數名稱 36 changeOrigin: true, //是否跨域 37 } 38 } 39 } 40 } 41 })
登錄模塊業務邏輯
通過登錄介面視窗返回的狀態碼以及返回值,判斷是否登錄成功,如果成功,則跳轉到主頁面,如果失敗,則提示錯誤信息,如下所示:
1 const onFinish = (values: any) => { 2 console.log(values); 3 console.log('Success:', values); 4 getD('/Login/Login',{"username":values.username,"password":values.password}).then(res=> { 5 if(res.status==200){ 6 //返回成功 7 if(res.data>0){ 8 sessionStorage['UserId']=values.username; 9 sessionStorage['LoginId']=res.data; 10 message.success('登錄成功!'); 11 router.push('/home'); 12 }else{ 13 message.error('登錄失敗,用戶命名錯誤!'); 14 } 15 }else if(res.status==204){ 16 //沒有返回 17 message.error('用戶命名錯誤!'); 18 }else{ 19 message.error('系統錯誤!'); 20 } 21 }) 22 .catch(error=>{ 23 console.log(error) 24 }); 25 //this.$router.push('/home'); 26 };
運行程式
啟動項目後,在瀏覽器中輸入網址,操作如下所示:
備註
以上就是Antdv+Asp.net WebApi開發學生信息管理系統第二篇的全部內容,寫文不易,多謝支持。學習編程,從關註【老碼識途】開始!!!
作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文版權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段聲明,且在文章頁面明顯位置給出原文連接,謝謝。
關註個人公眾號,定時同步更新技術及職場文章