Xero api XERO XML中存在错误(1,1)

Xero api XERO XML中存在错误(1,1),xero-api,Xero Api,我的代码已经运行了好几年了,我不得不将项目升级到.NET4。升级项目后,访问任何方法后,我都会出现以下错误: XML文档(1,1)中存在错误-十六进制值0x1F是无效字符。第1行位置1 以下是我尝试运行的代码示例: Dim ConsumerKey As String = "XXXXXXXXXXXXXXXXXXXXXX" Dim UserAgentString As String = "TEST Xero Interface (Private App Testing)"

我的代码已经运行了好几年了,我不得不将项目升级到.NET4。升级项目后,访问任何方法后,我都会出现以下错误:

XML文档(1,1)中存在错误-十六进制值0x1F是无效字符。第1行位置1

以下是我尝试运行的代码示例:

    Dim ConsumerKey As String = "XXXXXXXXXXXXXXXXXXXXXX"
        Dim UserAgentString As String = "TEST Xero Interface (Private App Testing)"
        Dim privateCertificate As X509Certificate2 = New X509Certificate2("C:\Data\public_privatekey.pfx", "xxxxxxx")
        Dim uConsumerSession As IOAuthSession = New XeroApiPrivateSession(UserAgentString, ConsumerKey, privateCertificate)
        Dim uRepository As New Repository(uConsumerSession)


        Dim uInvoice As New Model.Invoice
        Dim uContact As New Model.Contact
        uContact.Name = "ABC Ltd"
        uContact.IsCustomer = True
        uInvoice.Contact = uContact
        uInvoice.Type = "ACCREC"
        uInvoice.Date = Now
        uInvoice.DueDate = DateAdd(DateInterval.Day, 14, Now)
        uInvoice.Status = "DRAFT"
        uInvoice.LineAmountTypes = 0

        uInvoice.LineItems = New LineItems
        Dim uLineItem = New Model.LineItem
        uLineItem.Quantity = 1
        uLineItem.ItemCode = "TEST TRANS"
        uLineItem.Description = "Testing Router"
        uLineItem.AccountCode = "400"
        uLineItem.UnitAmount = 200
        uInvoice.LineItems.Add(uLineItem)
        uRepository.Create(Of Model.Invoice)(uInvoice)

我做错了什么?为什么我多年来使用的相同代码停止工作了

TLDR;您的代码将使用不推荐使用的TLS 1.0-在代码中使用以下命令强制使用TLS 1.2

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
我相信你已经解决了这个问题,但我得到了同样的结果,API返回了一个未记录的响应代码412,所以在使用API和做事情之前被拒绝

您希望用于.NET的旧SDK中的错误响应处理工作得不太好,因此尝试分析错误响应,因此出现了错误-这让我在调试时推迟了一段时间

我决定升级到新的Xeronet SDK,该SDK正在积极维护中-

然后我得到了相同的错误,只是这次错误消息有用,说明TLS 1.0不受支持,请升级,啊。哈根据他们的网站,他们在2018年6月底转向了对的支持,我认为这实际上发生在7月底,因为我在7月底做了一些工作

无论如何,最好将您的代码升级到新的SDK,然后强制.net使用TLS 1.2,如果是在.net 4.5上,请使用以下命令

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
如果使用4.0,那么

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;