如何使用 vba 将参数传递给 asp.net 网络 api?

How to pass a parameter using vba to an asp.net web api?

我正在尝试使用 vba 到 post 到网络 api。问题是webapi中参数为空。网络 api 写在 asp 中。我从 c# 调用了 api 并且它可以工作,但我无法从 vba.

让它工作

这是对 api 的 vba 调用:

Sub Test()

    Dim http As New MSXML2.XMLHTTP60
   
    http.Open "POST", "http://10.5.72.172:108/api/vbaemail", True

    http.SetRequestHeader "Content-type", "application/json"
    
    Call http.send("abc")
   
End Sub

这是我的简单网站 api。

public void Post([FromBody] string strJson)
{
    SqlConnection cnnCom = null;
    SqlCommand cmdCom = null;
    string strSql = null;

    //write parameter to table
    cnnCom = new SqlConnection(CF.Get_Connection_String(CF.DatabaseName.COMMON));
    cnnCom.Open();
    strSql =
        "INSERT INTO Test( " +
        "F1) " +
        "VALUES( " +
        "'" + strJson + "')";
    cmdCom = new SqlCommand(strSql, cnnCom);
    cmdCom.ExecuteNonQuery();
    cnnCom.Dispose();
}

这是对网络的有效 C# 调用 api:

 static void Main(string[] args)
{
    HttpClient hc = new HttpClient();
    Task<HttpResponseMessage> task1 = null;

    //call web api
    task1 = hc.PostAsJsonAsync<string> 
        ("http://10.5.72.172:108/api/vbaemail", "abc");
}
http.Open "POST", "http://10.5.72.172:108/api/vbaemail", True

而不是 True 设置 False

我能够通过用单引号将字符串括起来来让它工作。问题是我不能在传递到网络的正文中的任何地方使用单引号 api,尽管可能有办法避开它们。在我们的例子中,这没什么大不了的,我们只是想修补一些最终会消失的旧 vba 程序。

Sub Test()

    Dim http As New MSXML2.XMLHTTP60
   
    http.Open "POST", "http://10.5.72.172:108/api/vbaemail", True

    http.SetRequestHeader "Content-type", "application/json"
    
    Call http.send("'" + strJson + "'")  
   
End Sub