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

衆所周知,在webapi中,若是有個接口須要權限,通常會將帶權限的字段塞進header中。可是,在帶權限的文檔下載接口中,不管是用post,仍是get方式,咱們沒法設置header頭信息。苦惱呀?別急,接下來咱們慢慢拆解並分析步驟。前端

帶權限的文檔下載接口通常分爲3個步驟:web

一、驗證權限;後端

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

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

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

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

咱們能夠將第二個步驟和第三個步驟在接口中分開,分爲兩個接口來完成一個文檔的下載功能。url

 

第二個步驟的詳細方法以下:中間件

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

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

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

四、權限驗證經過後,則查詢數據並生成文檔到磁盤中。若是是直接下載文檔,則能夠省略這一步;;

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

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

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

二、爲什麼須要將當前時間也一塊兒加密呢?咱們能夠經過該時間來判斷url是否過時。過時時間能夠自定義,通常設置爲30秒到120秒之間。

三、被加密的文件名稱能夠是相對路徑,也能夠是一個不帶路徑的文件名稱,這樣能夠隱藏文件的真實路徑。當咱們須要在後端用到該文件時,纔給其加上絕對路徑。

 

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

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

二、後端經過密鑰解析後獲得文件名和一個時間;

三、經過當前時間減去解密後獲得的時間,判斷當前加密串是否過時;

四、若是已過時,則返回錯誤信息到前端;

五、若是未過時,則加載文檔流,並返回到前端。

 

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

相關文章
相關標籤/搜索