項目結構如下圖所示: admin和demo是兩個api服務。gateway是一個ocelot網關服務。 第一步在ocelot.json添加如下配置: 第二步:在ocelot項目修改以下幾處: demo api和admin api不需要修改什麼,只要以前正常打開,現在就可以在網關服務的swagger上 ...
powershell 動態 網頁 跨平臺 asp.net dynamic cross platform
powershell 傳教士 原創文章。始於 2023-04-03 允許轉載,但必須保留名字和出處
---【前言】---
本例將為您展示:
在win,linux版powershell v7.3中,載入win,linux版asp.net庫。繼而用純powershell腳本&代碼作為網頁動態語言。開發搭建win-linux通用的動態web網站,例子。
從.net跨平臺那天起,asp.net就能開發跨平臺動態網頁。在asp.net中執行powershell代碼也是早就有的,但那需要寫c#代碼。
看到python家開發動態網站,我是有些羡慕嫉妒恨的。不過這種情況結束了。近期和外國同行討論,一起研究出了示例代碼。p老爺的這條瘸腿被接上了!!!
---【圖例:全部腳本代碼,和相關庫】---
https://gitee.com/chuanjiao10/kasini3000web
在win中運行伺服器,並使用chrome瀏覽器測試通過。
在linux中運行伺服器,並使用curl測試通過。
---【正文】---
使用場景:
* 運維,管理員用的中小型網站,dashboard。
* 按某按鈕後,用powershell代碼,加win語音庫,朗讀中英文文字,單詞。
* 展示表格。
* 輸入某些值,並用後臺powershell,調用資料庫客戶端,把剛纔的數據,寫入單機庫sqlite,litedb,excel文件,mysql庫,sqlserver,etcd庫等。
案例:
目前我用它開發kasini3000的web框架。
框架還沒開始,目前只是簡陋的例子,勿噴。
系統需求:
powershell v7.3.x。
目前暫時只支持這個版本,因為asp.net類庫我目前下載的都是.net7版本的。
未來絕對會升級到.net8的,屆時需要使用powershell v7.4.x,以便ps版本和.net類庫版本一致。
------------------【開始講解例子】------------------
1 製作首頁。首頁上有個web form,上面有個post方法的按鈕。html代碼:
<form action="/getdate/" method="post"> <input type="submit" name="Logon" value="按此" />
2 首頁,powershell代碼:
$主頁代碼 = { param($HttpContext,$pagefile2) $pindex = Get-Content -Path $pagefile2 -Raw $a = [System.Text.Encoding]::UTF8.GetBytes($pindex) $HttpContext.Response.Body.WriteAsync($a, 0, $a.Length).AsTask().Wait() } $主頁委托 = [powerShellDelegate]::new($主頁代碼,'index.html')
3 get-date命令,powershell代碼:
$獲取時間代碼 = { param($HttpContext) $d = Get-Date -Format F $a = [System.Text.Encoding]::GetEncoding(936).GetBytes($d) $HttpContext.Response.Body.WriteAsync($a, 0, $a.Length).AsTask().Wait() } $獲取時間委托 = [powerShellDelegate]::new($獲取時間代碼,'')
4 把首頁添加到路由。把get-date命令,添加到路由【/getdate】。
註意:首頁是get方法,get-date是post方法。powershell代碼:
[Void][Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions]::UseEndpoints($App, { [Microsoft.AspNetCore.Builder.EndpointRouteBuilderExtensions]::MapGet($args[0],"/", $主頁委托.Invoke) }) [Void][Microsoft.AspNetCore.Builder.EndpointRoutingApplicationBuilderExtensions]::UseEndpoints($App, { [Microsoft.AspNetCore.Builder.EndpointRouteBuilderExtensions]::MapPost($args[0],"/getdate/", $獲取時間委托.Invoke) })
---【後記】---
當然,你還可以這樣: 寫一個d:\xxx\a.ps1作為回調腳本。
當每次訪問http://127.0.0.1:5000/a 時, 執行此腳本。
我腦子中只有一件事:替“潘而少”老爺把,【網頁動態語言】這條瘸腿接上。
-完-