我有一個 Blazor 服務器應用程式,用戶可以在其中使用過濾器查看電影串列。例如,他們可以指定年份、國家等,符合條件的電影將顯示在頁面上(Movie物件串列)。
我想讓用戶能夠將顯示的串列保存為文本檔案。我知道如何向另一個 Razor 頁面或 MVC 或 API 控制器發出 HTTP Get 請求以回傳預定義的檔案,但正在努力將任何引數傳遞給端點。
最初我想使用HttpClient.PostAsJsonAsync將 POST 請求發送到 API 控制器,將串列作為請求正文傳遞,這在某種意義上可以正常作業,如果我在控制器方法中放置斷點,它會被命中,但不會向用戶回傳任何內容。
如果我使用一個<a>元素或按鈕 onClick 方法,NavigationManager.NavigateTo它可以很好地用于預定的檔案 HTTP Get 請求,但是我如何為用戶提供包含他們在瀏覽器上看到的電影/物件串列的檔案?
即我如何通過NavigationManager.NavigateTo或使用<a>元素或任何其他方式傳遞引數,以便將資料發送到端點/服務器,然后它可以用來生成檔案并將該檔案回傳給用戶進行保存?
模擬代碼以了解我想要什么。這只是一個設計/想法參考,不一定是 WebApi、MVC 或其他任何東西。我只需要一些可以與 Blazor 一起使用的東西:
[HttpPost]
File WebApiMethodThatDoesTheWork(CustomObject data)
{
StringBuilder stringBuilder = new();
foreach (var item in data.Items)
{
stringBuilder.Append(item);
}
File.WriteAllText("test.txt", stringBuilder.ToString());
return File("test.txt");
}
我對檔案下載方式的唯一兩個要求是:它應該是用戶友好的,意思是通常的“你想打開還是保存這個檔案?” 對話框將是完美的,它不應該使用對GETRazor 頁面的請求來檢索檔案,除非單個 Razor 頁面可用于下載許多不同的檔案型別。即,如果用戶想要下載電影串列,而另一個用戶想要下載歌曲串列。以我目前的知識,我認為對于這種情況,我必須有 2 個不同的 Razor 頁面,這是次優的。
uj5u.com熱心網友回復:
我沒有一個完整的打包答案,因為我的很舊而且 Blazor 現在的作業方式不同,但基本原則是相同的。
第 1 步 - JS 互操作呼叫 URL.createObjectURL(new Blob([{your data}]))
第 2 步 - 使用生成的物件 url 作為 href 和下載屬性呈現錨標記。
<a id="download" href=@BlobUrl download=@FileName>Download File</a>
第 3 步 - 可選的 JS Interop 呼叫以單擊呈現的錨標記,因此用戶不必這樣做。
用戶是否看到 Save As.. 對話框取決于他們的瀏覽器/作業系統 - 您無法控制(有一個具有 saveas 功能的下載 api,但不完全支持)
uj5u.com熱心網友回復:
您可以嘗試使用該檔案重新過濾串列,并在啟動時檢查他們是否有該檔案......您可以選擇很多選項
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374205.html
上一篇:python-requests不抓取JSESSIONID
下一篇:Python找不到那里的元素
