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的主要内容,如果未能解决你的问题,请参考以下文章
jquery Ajax 调用 - 数据参数未传递给 MVC 控制器操作