1. 程式人生 > 其它 >Blazor框架為前端開啟的.NET世界大門

Blazor框架為前端開啟的.NET世界大門

最近在研究Blazor框架,做了些Demo,感覺到了它強大之處,真的不弱於任何JS框架。
首先C#的語言特性,相比JS不知高出多少,而JS要大一點的專案,必然少不了webpack之類的工具,看著都頭痛,實在不想接觸。說實話,webpack之類的工具應該是JS語言自身的缺點才產生這樣的工具,其他的任何一個語言,需要這種打包工具嗎?
用Blazor框架,必須用webassembly才有意義,而Blazor Server是依賴 SignalR與服務端進行通訊,邏輯指令碼還是運行於服務端,並更新DOM。通過webassembly,Blazor可以把整個.NET都帶到了瀏覽器上。
先看一個例項,圖片上傳前處理,不借助後端,直接在瀏覽器上處理,例項通過nuget引用了SixLabors.ImageSharp影象處理工具,.NET版本為5.0,如果是3.0則沒有元件,通過這個元件我們可以處理本地檔案。

@page “/UseFile”
@using SixLabors.ImageSharp
@using SixLabors.ImageSharp.Processing

@if (ImageLoaded) { }
@Message @code { private bool ImageLoaded { get; set; } public string Message { get; set; } public string ImgDataUrl { get; set; } public async Task FileChange(InputFileChangeEventArgs evn) { try { //載入圖片內容 var sFile = evn.File.OpenReadStream(1024 * 1024 * 5); //5M限制 var msInput = new System.IO.MemoryStream(); await sFile.CopyToAsync(msInput);
        var img = SixLabors.ImageSharp.Image.Load(msInput.ToArray());
        img.Mutate((p) => { p.Resize(200, 200); }); //調整大小
        var fmt = SixLabors.ImageSharp.Formats.Jpeg.JpegFormat.Instance;
        ImgDataUrl = img.ToBase64String(fmt); //data:application/octet-stream;base64, ....
        ImageLoaded = true;
        Message = "圖片已處理";
        StateHasChanged();
    }
    catch (Exception err)
    {
        this.Message = err.Message;
    }
}

現在我們真的完全的,僅在瀏覽器上處理了影象,不傳送任何請求到後端。我們看到,實現這一過程,我們需要從nuget上引入SixLabors.ImageSharp並使用它就行了。nuget上還有多少東西可以用,不用我說了吧。
第二個例子,Excel匯出,同樣在nuget上引用Epplus:
@page “/exportdata”

匯出Excel

請輸入內容:

這是標準的.xlsx檔案,可不是csv之類的簡單內容輸出,完全在瀏覽器上執行,沒有發出任何後端請求。同樣,只需在nuget上引入一個東西,然後使用就行了。這些東西通常來說,我們都只能在伺服器上執行的,但通過Webassembly和blazor,我們把它們直接搬到瀏覽器裡來了。非常令人興奮的事情。不可否認,讓JS來做這些事情當然也行,但遠不如.NET來得舒服。

Blazor真的為前端打開了一個.NET世界的大門。只是,現在還只是剛開始,很多網站監控人還沒有意識到.NET能給我們帶來的東西。加上前端JS的生態目前已經非常豐富,加上很多人對.NET技術一直帶著歧視的眼光,Blazor要進入前端站穩腳跟,還要走很長的路。我相信,Blazor要火起來的話,就沒JS什麼事了。