POST 参数未使用 VBA 传递给 Web API

Posted

技术标签:

【中文标题】POST 参数未使用 VBA 传递给 Web API【英文标题】:POST Parameters not passing to Web API using VBA 【发布时间】:2016-06-20 08:39:10 【问题描述】:

我有一个沼泽标准 WebAPI,它接受 POST 并接受这些参数并处理某些事情。我不确定问题是 VBA 还是 ASP.Net WebAPI,所以我交叉发布。

我使用 Postman 测试了 API,当我发布 Key/Value 参数时它运行良好。

我也尝试了以下方法和相关参数,得到了相同的结果:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")

我在让它与 VBA 一起工作时遇到问题,在 WebAPI 上的 Visual Studio 中进行调试时,我看不到我在任何地方发布的值。就像请求是空白的一样。我的 WebAPI 随后抛出错误,因为缺少参数并且需要某些参数。

我不确定这是 VBA 方面还是 ASP.NET WebAPI 方面的问题,所以我交叉发布,希望有人能指出或发现我做错了什么。

Private Sub Command4_Click()

Dim argumentString1 As String

argumentString1 = "companyId=228&secondsToLog=15&subject=TestBackup123&description=TestDescription" & _
"&category=&tag=&ticketType=task&assignee=gavin&requesterEmail=bob@smith.com" & _
"&submitterName=gavin&status=open&priority=normal"

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://localhost:64874/api/zendeskhelper"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send (argumentString1)


txtresult = objHTTP.responsetext & ": " & argumentString1
End Sub

Web API 结构如下所示:

public HttpResponseMessage Post([FromUri] TicketBody ticket)

// Nothing is bound to ticket like it is in Postman

任何帮助或指点将不胜感激!

【问题讨论】:

你试过没有[FromUri]吗? 我现在有,参数现在正在传递!我将不得不阅读 FromURI 的实际作用。如果您想将此作为解决方案发布,我会将其标记为这样! 还有[FromBody]指定参数只能来自请求体。 【参考方案1】:

您发送数据的方式,您需要删除[FromUri]。当使用[FromUri] 时,ASP.NET 引擎将在 Uri 中查找数据,而不是在请求的正文中。

public HttpResponseMessage Post(TicketBody ticket)

    // 'ticket should not be null now

另一方面,如果您需要保留[FromUri],您可以将呼叫更改为:

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://localhost:64874/api/zendeskhelper?" & argumentString1 
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("")

【讨论】:

以上是关于POST 参数未使用 VBA 传递给 Web API的主要内容,如果未能解决你的问题,请参考以下文章

使用范围变量时未定义 Excel vba 变量

jquery Ajax 调用 - 数据参数未传递给 MVC 控制器操作

使用 POST 方法将值传递给 Web 服务 [关闭]

Mux 处理程序未接收到从 curl post 传递的所有查询参数

Excel VBA - 将参数参数传递给 Sub

VB中过程调用时有几种参数传递方式,说明其区别