7

我有一个 asp.net mvc 应用程序,它允许使用 CSV 文件上传公司结构。我被问及使用 powershell 脚本自动化此功能的可能性。在 powershell 中创建 CSV 很容易,但我不知道如何上传到 asp.net。

我的第一选择是使用 WebClient,但我的身份验证有问题 - 在 mvc 中我们使用表单身份验证。我在这里读到这是可能的,但如果我的登录表单发生更改,我将不得不向客户端发送更新的脚本。我想省略客户端的管理代码。

第二种选择是创建单独的控制器并在其中使用授权令牌,但我看起来像“再次发明轮子”,因为我需要编写所有负责身份验证的代码。

我可以改进上述选项之一吗?或者也许有更好的选择?

4

3 回答 3

1

您可能能够使用Invoke-RestMethodcmdlet 使用现有的 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 表单身份验证。

于 2014-07-18T03:03:55.520 回答
0

使用侧通道怎么样?

有两种方法。您要么不时将其发送到客户的 Web 服务器,要么 Web 服务器从您那里下载数据。

对于发送数据,基于 SSL 的 FTP 应该足够安全。这是一个关于如何使用 Powershell 命令 FTP的示例。为 IIS 配置FTP/SSL 很容易。

要接收数据,只需在您自己的网站上发布 CSV。在客户的 Web 服务器上设置一个脚本,该脚本不时下载 CSV。如果除了客户之外的任何人都无法访问 CSV,则需要客户端证书

于 2013-04-16T05:14:02.230 回答
0

我可能会这样做:

  • 第一步:在asp.net服务器上创建一个https网页来接收csv
  • 第 2 步:创建一个 powershell 脚本,该脚本使用-F选项调用curl以向其发布文件并在调用时附加您需要的任何元数据
  • 第 3 步:收到文件后,使用表单中提供的元数据存储它,并将 clientid/date/etc 附加到文件中
于 2013-04-17T14:08:49.397 回答