2013-04-14 94 views
7

我有一個asp.net mvc應用程序,它允許使用CSV文件上傳公司結構。我被問及使用powershell腳本自動執行此功能的可能性。在powershell中創建CSV很容易,但我不知道如何上傳到asp.net。上傳文件格式powershell到asp.net

我的第一選擇是使用WebClient,但我有身份驗證的問題 - 在mvc中我們使用表單身份驗證。我讀here它是可能的,但是如果我的登錄表單發生更改,我將不得不將更新的腳本發送到客戶端。我想在客戶端省略代碼。

第二種選擇是將單獨的控制器打包並在其中使用授權令牌,但我看起來像「再次發明輪子」,因爲我需要編寫所有負責認證的代碼。

我可以改進上述選項嗎?或者也許有更好的選擇?

+0

您是否需要知道某公司上傳了哪個文件?如果沒有,爲什麼不創建一個https web API並使用簡單的「apikey」。爲每家公司提供一個腳本,其中包含「apikey」和其他api鏈接,然後您就可以開始了。 –

+0

出於安全原因,我認爲是的。我正在考慮每個人的API密鑰,但我不確定這是否是一個好主意 –

回答

0

如何使用側通道?

有兩種方法。您可以隨時將其發送到客戶的Web服務器,或者Web服務器從您那裏下載數據。

對於發送數據,基於SSL的FTP應該足夠安全。以下是關於如何使用Powershell命令FTP的example。爲IIS配置FTP/SSL爲easy enough

對於接收數據,只需在您自己的網站上發佈CSV。在客戶的Web服務器上設置一個腳本,可以隨時下載CSV。如果除客戶以外的任何人都無法訪問CSV,則需要client certificate

+0

但我需要這種其他方式。客戶端根據公司結構生成CSV並將其上傳到我的服務器。 –

+0

咦?只是扭轉角色? – vonPryz

+0

如何發現公司上傳的文件到FTP? Morover我將不得不爲每家公司創建證書,爲每家公司創建文件夾等,這很難管理。 –

0

我可能會做這樣的:

  • 第1步:創建asp.net服務器上的HTTPS網頁接收CSV
  • 第2步:創建調用捲曲 PowerShell腳本使用-F選項向其發佈文件並追加所需的所有元數據
  • 步驟3:接收到文件後,使用表單中提供的元數據進行存儲,並將clientid/date/etc附加到文件
+0

問題在於身份驗證。 https是唯一的協議 –

+0

我的壞我沒有讀通過,猜你總是可以調用wget或東西提交到登錄表單並存儲cookie,以便稍後可以追加請求,如果你想要一個易變的var名稱客戶端預先下載配置文件。 – RuntimeError

1

您可以使用現有的使用Invoke-RestMethod cmdlet的Web服務,但它可能需要兩次單獨的調用。對於這兩個調用,您可能需要說-Method Post。可以使用WebClient完成所有這些操作,但該cmdlet可能更易於描述。我還沒有真正嘗試過這一點,但它可能是這個樣子:

Invoke-RestMethod -Method Post $loginPage -SessionVariable webSession -Body "..." 
Invoke-RestMethod -Method Post $uploadPage -WebSession $webSession -Body "..." 

對於第一次調用,您指定的登錄頁面的URL,並且將模擬通過提供用戶名和密碼登錄Web窗體在-Body參數中,並使用-SessionVariable來捕獲和存儲上下文,以使下一個請求得到認證。

在第二個請求中,您使用數據上傳URL,-WebSession參數提供第一個請求建立的上下文,並使用-Body上傳您的CSV。請注意,您需要第二個webSession變量中的美元符號,但不是第一個。

當然,您需要存儲用於自動化的用戶名/密碼才能在某處使用,但這對於無人值守自動化而言始終需要。緩解這種情況的一種可能的方法是使用基於客戶端證書的憑據,而不是Web表單身份驗證。

+0

我會試試這個解決方案。 +1的想法 –