我有一个沼泽标准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
}
非常感谢任何帮助或指示!
答案 0 :(得分:3)
您发送数据的方式,您需要删除[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 ("")