【问题标题】:REST API Call from VB ( ZOHO CREATOR )来自 VB 的 REST API 调用(ZOHO CREATOR)
【发布时间】:2018-05-01 16:15:25
【问题描述】:

试图打通这个电话

https://www.zoho.com/creator/help/api/rest-api/rest-api-edit-records.html

我确实尝试了一切,但似乎我需要基本知识。谁能告诉我我的代码有什么问题

Public Sub updateRecord(ByVal ht As Hashtable, ByVal criteriaField As String)

        Dim apiUrl As String = "https://creator.zoho.com/api/xml/write/apikey=xxxx"
        Dim xmlStr As New System.Text.StringBuilder
        Dim newvalue As New System.Text.StringBuilder

        newvalue.AppendLine("<newvalues>")
        xmlStr.Append("<ZohoCreator><applicationlist>")
        xmlStr.Append("<application name=copy-of-ebay-inventory><formlist><form name=Ebay_Inventory>")
        xmlStr.AppendLine("<update>")
        xmlStr.AppendLine("<criteria>")
        xmlStr.AppendLine("<field name='Ticket Number' compOperator='Equals' value='20573'></field>")
        xmlStr.AppendLine("</criteria>")
        newvalue.AppendLine("<field name='Found on site' value='1'></field>")
        newvalue.AppendLine("</newvalues>")
        xmlStr.Append(newvalue.ToString)
        xmlStr.AppendLine("</update>")
        xmlStr.AppendLine("</form></formlist></application></applicationlist></ZohoCreator>")

        Dim params As String = "XMLString=" + xmlStr.ToString

        Dim res As String = getResponseFromUrl(apiUrl, params)

    End Sub
Public Function getResponseFromUrl(ByVal url As String, ByVal params As String)
        Dim str As String = ""
        Try
            Dim webreq As HttpWebRequest = WebRequest.Create(url)
            webreq.Method = "POST"
            webreq.ContentType = "application/x-www-form-urlencoded"
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(params)
            Dim dataStream As Stream = webreq.GetRequestStream()
            dataStream.Write(byteArray, 0, byteArray.Length)
            dataStream.Close()

            Dim res As WebResponse = webreq.GetResponse()
            Dim stream As Stream = res.GetResponseStream()
            Dim streamReader As New StreamReader(stream)
            str = streamReader.ReadToEnd
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        Return str.ToString
    End Function

在格式化我的 xml 结束时

但事实并非如此。 在..上找到了一个很好的例子

LINK DEMO

回复

【问题讨论】:

  • 用引号括起来你的属性。
  • @N0Alias 感谢您快速回答您要加引号的属性? &lt;field name='Ticket Number' compOperator='Equals' value='20573'&gt;&lt;/field&gt;
  • 也许也是,但我会查看错误消息指示的位置...在元素类型“应用程序”中。
  • @N0Alias 你是对的人。您应该将其发布为答案。

标签: c# vb.net httpwebrequest zoho


【解决方案1】:

用引号括住所有 XML 属性值(单引号或双引号,尽管双引号更常见):

    xmlStr.Append("<application name=" & ControlChars.Quote & "copy-of-ebay-inventory" & ControlChars.Quote &
                  "><formlist><form name=" & ControlChars.Quote & "Ebay_Inventory" & ControlChars.Quote & ">")

【讨论】:

  • 你用过这个 zoho 吗?现在我的应用程序名称无效
  • 不,抱歉。我对该异常的唯一三个猜测是 1:该应用程序名称与您的密钥无关。 2:名称中的破折号应区别对待。 3:即使他们将属性列为名称(或也期望 ID),他们仍期待某种 ID。
【解决方案2】:

错误信息告诉你name属性的必须在应用节点/元素上用引号括起来:

xmlStr.Append("&lt;application name='copy-of-ebay-inventory'&gt;&lt;formlist&gt;&lt;form name=Ebay_Inventory&gt;")

注意“copy-of-ebay-inventory”周围的 ' 单引号...

【讨论】:

    猜你喜欢
    • 2020-08-14
    • 2017-11-15
    • 1970-01-01
    • 2021-06-06
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多