1. 程式人生 > >.net core webapi帶權限的文件下載方法

.net core webapi帶權限的文件下載方法

加載 名稱 完成 分開 但是 分析 nbsp 客戶端 webapi

眾所周知,在webapi中,如果有個接口需要權限,一般會將帶權限的字段塞進header中。但是,在帶權限的文檔下載接口中,無論是用post,還是get方式,我們無法設置header頭信息。苦惱呀?別急,接下來我們慢慢拆解並分析步驟。

帶權限的文檔下載接口一般分為3個步驟:

1、驗證權限;

2、查找數據並生成文檔或文檔流;

3、將文檔寫入response的流中並返回到客戶端。

第一個步驟,我們就不詳談了,可以使用驗證權限的中間件,例如identity4,去做權限驗證的功能。

關鍵在於第二和第三個步驟。

我們可以將第二個步驟和第三個步驟在接口中分開,分為兩個接口來完成一個文檔的下載功能。

第二個步驟的詳細方法如下:

1、前端使用post方式,將需要下載的參數傳到後端,並將帶權限的字段塞進header中;

2、後端收到消息後,首先判斷權限,即當前用戶是否有權限下載該文檔或數據;

3、權限驗證不通過,則返回錯誤到前端;

4、權限驗證通過後,則查詢數據並生成文檔到磁盤中。如果是直接下載文檔,則可以省略這一步;;

5、獲取文檔的文件名稱和當前的時間等參數,通過一個密鑰進行對稱加密,並將加密後的字符串返回到前端。

解惑第二個步驟中的方法:

1、使用Post方式傳輸,並設置header頭信息;

2、為何需要將當前時間也一起加密呢?我們可以通過該時間來判斷url是否過期。過期時間可以自定義,一般設置為30秒到120秒之間。

第三個步驟的詳細方法如下:

1、前端將第二個步驟的返回的加密字符串通過post或者get方式傳到後端;

2、後端通過密鑰解析後得到文件名和一個時間;

3、通過當前時間減去解密後得到的時間,判斷當前加密串是否過期;

4、如果已過期,則返回錯誤信息到前端;

5、如果未過期,則加載文檔流,並返回到前端。

通過以上方法,我們在webapi中就實現了帶權限的文檔下載操作。

.net core webapi帶權限的文件下載方法