我有一个标准的 WebAPI,它接受 POST 并获取这些参数并处理某些事情。我不确定问题是出在 VBA 还是 ASP.Net WebAPI,所以我交叉发帖。
我使用 Postman 来测试 API,当我发布键/值参数时它工作正常。
我也尝试了以下方法和相关参数,得到了相同的结果:
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]
时,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 ("")
关于asp.net - POST 参数未使用 VBA 传递到 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37917949/