我的『MVP.Blazor』快速创建与部署
?
最近一直在錄Blog.Core相關(guān)的操作視頻,也沒有研究過什么新的東西,公司也各種項目迭代,特別是從Fwk遷移到NetCore,真的是不是一個容易的事,閑的時候,為了歇歇腦子,就抽出時間簡單看了看又有哪些新技術(shù),最近聊的挺多的就是Blazor了吧,所以我也看了看,這里聲明一點,我并不打算出一個完整的Blazor系列教程(最近老有人讓我出系列教程????),只是走馬觀花的過一遍,看看這個到底是一個什么東西,感興趣的自己可以去深入學(xué)習(xí)下,畢竟現(xiàn)在的資料還不是最多的,可以鍛煉下自己,而且也算是一個吃螃蟹的人,畢竟有歷史價值,好啦,廢話不多說,直接開整。
1、這個項目的立項初衷
可能還有一部分小伙伴不太了解,我年初申請上了微軟的MVP,我也沒有過多的宣傳,畢竟這只是一個鼓勵而已,平時該解答的我還是會解答。MVP呢,每次只有一年的有效期,所以每個新的一年都還需要風(fēng)雨兼程的往前走,還是需要傳遞知識,那就少不了將自己做過的,寫過的,分享過的東西給列出來(注意:這里可能有轉(zhuǎn)載別人的文章),作為一個展示,所以呢,我就想著自己寫個小的Portal吧,把自己整理的東西給放出來,多半是微信公眾號的,也可以給大家做一個方便查找和學(xué)習(xí)的列表。
但是在項目選型的時候,我猶豫了好幾天,用什么呢,ASP.NET Core MVC么,其實我已經(jīng)寫了好多個了,公司的小項目也一直在使用,所以不想寫了,無非就是增刪改查。
前后端分離項目?也寫的吐了,不想學(xué)React,我看國內(nèi)外包企業(yè)用的比較多,但是我還是想結(jié)合下我的Blog.Core項目,畢竟已經(jīng)封裝的很好了,可以做為一個后端的資源服務(wù)器來使用。
與此同時,看到有人推送了多個關(guān)于微軟的Blazor框架的相關(guān)內(nèi)容,號稱可以使用C#來寫前端組件,個人表示很好奇。
基于以上三點呢,就選用了(Blazor+Blog.Core)的架構(gòu),你也可以把它理解成一個前后端分離的項目,因為我用的是wasm的客戶端,用Blog.Core提供資源服務(wù)器,兩者是分開部署的:
http://mvp.neters.club(這個就是客戶端地址)
https://github.com/anjoy8/Blog.MVP.Blazor(開源地址)
(首次加載奇慢,還在研究,文末有說到)
目前這個只是一個小的版本,當(dāng)然后邊還是有很多問題的,可能會一直維護,慢慢添加,好啦,下邊正式開始。
2、開發(fā)環(huán)境準備
1、更新工具
目前BlazorWebAssembly版本是3.2.0Previ,如果要使用它的話,必須要安裝.NET Core3.1.2+的SDK,注意小版本也要2以上。
我的系統(tǒng)環(huán)境是:
VS 2019 16.4.0、.NET Core SDK 3.1.3
如果你想調(diào)試blazor的話,需要更新vs2019到16.6+的最新版本,
更新到16.6+后,不僅可以調(diào)試Blazor,它也自帶了相應(yīng)的開發(fā)模板,如果你現(xiàn)在還不想把自己的vs2019升級的話,只能手動先安裝下模板了。
截至發(fā)稿,我已經(jīng)升級到vs2019?16.6.1了。?
2、下載模板
使用前,需要安裝對應(yīng)的模板
安裝完成后,可以看到我們的電腦里有模板:
然后我們可以打開VS2019,可以看到已經(jīng)有對應(yīng)的快捷入口:
點擊創(chuàng)建:
可以看到,和我們的ASP.NetCore的webapi項目還是很像的,那到了這里,我們的項目環(huán)境就正式的搭建完成,下一步開始創(chuàng)建Demo了。
請注意:這里我們使用的是wasm客戶端項目,不是server項目,從名字上也能明白兩個對應(yīng)的職能是什么,關(guān)于server的使用,我以后會說到。
3、創(chuàng)建一個默認的示例項目
通過上邊的步驟,我們創(chuàng)建了一個wasm的初始化示例項目,結(jié)構(gòu)如下:
從上邊的項目結(jié)構(gòu)中,我們基本也能看懂七七八八,當(dāng)然,前提是稍微學(xué)過NetCore或者是MVC的Razor頁面。
添加配置文件
你可以在wwwroot文件夾下,創(chuàng)建appsettings.json文件,然后在razor頁面內(nèi)注入:
是不是很簡單,可見依賴注入是多么的重要!
那分析完結(jié)構(gòu),直接運行下,看看效果。
F5 查看效果
我們直接執(zhí)行F5,項目是會自動執(zhí)行Build操作的,就像我們之前學(xué)習(xí)vue,執(zhí)行了serve命令后,就能運行項目,監(jiān)聽端口了:
過程特別簡單,而且渲染的也很快,具體的渲染邏輯這里不說了,自行研究吧,只要是會vue的話,肯定這個也能理解。
核心代碼解釋
官方給了三個例子,我這里簡單說一下獲取數(shù)據(jù)的吧,很簡單,還是mvc的老路子,只不過增加了些MVVM的影子:
核心的部分我都做了注釋,相信都能看的懂,畢竟我相信,只有netcore學(xué)會了的小伙伴,才回去看blazor,如果netcore都不會,我不建議看。
這里強調(diào)的是,Http信息有兩個版本,自己看好就行,畢竟不同的版本,對應(yīng)不同的方法:
| GetJsonAsync | GetFromJsonAsync |
| PostJsonAsync | PostAsJsonAsync |
| PutJsonAsync | PutAsJsonAsync |
可能的錯誤
開發(fā)中可能會報錯:
好啦,示例項目說完了,那接下來說說我的項目吧。
4、Blog.MVP.Blazor設(shè)計思路
其實也不算是設(shè)計思路,就說下如何做的吧。
1、所用接口
畢竟是辛辛苦苦搭建的Blog.Core項目,所以能用還是盡量用的,而且很巧的是,正好能和我這個無縫對接,僅僅需要用到博客表BlogArticle即可:
當(dāng)時正好我做了博客分類bcategory這個字段,這里可以排上用場,因為我不想和Blog.Vue項目搞混,所以我新建的分類MVP_xxxx_這種格式,作者字段用的是微信公眾號鏈接,其他的就是很基本的了。
接口1:獲取指定分類的文章:
await?Http.GetJsonAsync<MessageModel<PageModel<BlogArticle>>> ("/api/Blog?page=1&bcategory=MVP_ids4_2020&intPageSize=20");這里很人性化,還可以指定返回類型,無縫對接我們的Blog.Core資源服務(wù)器。
接口2:做頁面跳轉(zhuǎn),增加閱讀量:
http://apk.neters.club/api/Blog/GoUrl?id=@(bID)因為我們的地址是外鏈地址,而且還是微信文章的地址,如果是微信客戶端外訪問的話,系統(tǒng)是不會記錄閱讀量的,只能我們自己記錄,所以我增加了這個跳轉(zhuǎn)鏈接,很簡單,自己查看代碼即可。
2、設(shè)計組件
本來文章頁只需要一個頁面就行,然后通過參數(shù)傳遞,來實現(xiàn)不同信息展示,但是我偷懶了,直接多個頁面,通過路由地址,強行的進行分類展示,這樣不好,第一版先這么吧,但是也做了幾個組件,比如:
還是三模塊的形式,HTML-CSS-JS(這里是C#)的模式,是不是和vue的組件設(shè)計很像,當(dāng)然至于能不能雙向綁定,應(yīng)該是可以的,你可以試試。
3、調(diào)用組件
這個也很簡單,直接進行綁定數(shù)據(jù)即可:
而且也可以幫忙命令事件:
到了這里,如果你會vue開發(fā),是不是感覺很blazor真的很像:
無論是數(shù)據(jù)的獲取,
還是組件的定義,
然后是數(shù)據(jù)的綁定,
甚至是渲染的過程
4、綁定資源服務(wù)器地址
我們既然要用http請求,肯定要定義地址,在Program.cs文件中,直接定義:
5、最后別忘了跨域配置
這個是老生常談了,既然是分離,肯定要配置跨域,
我這里使用的是CORS跨域,NGINX部署,暫時還沒有來得及代理的方式,以后有機會慢慢研究吧,CORS也是很簡單的,配置后端口號就行了。
6、部署
其實這個很簡單的,我們直接publish下我們的項目,就能看到打包好了,但是并沒有我們想象中的項目名稱的的dll,
如果你是IIS部署,那直接路徑設(shè)置這個publish文件夾即可。
如果是Nginx部署,可以直接指定wwwroot路徑,就像是部署打包好的vue項目一樣。
5、未來的路還是很長的
其實你看完了文章,會發(fā)現(xiàn)目前還是遇到了很多問題,比如:
1、首次打開太慢了,竟然把dll文件也加載了,我懷疑是我的問題,但是還沒有找到合適的資料,有知道的歡迎告訴我。
2、雖然很像vue,但是操作起來還是沒有vue那么絲滑。
3、感覺還是和IIS很兼容,就像IdentityServer4那樣。
但是!畢竟是一門新興的技術(shù),取名MVP.Blazor,也是希望能給Blazor一個好的未來吧,希望未來可期!
總結(jié)
以上是生活随笔為你收集整理的我的『MVP.Blazor』快速创建与部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Magicodes.IE 在100万数据
- 下一篇: 字符串太占内存了,我想了各种奇思淫巧对它