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

时间:2016-06-20 08:39:10

标签: asp.net vba asp.net-web-api access-vba

我有一个沼泽标准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
}

非常感谢任何帮助或指示!

1 个答案:

答案 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 ("")