400不良请求:XML文档(1,1254)消息中有一个错误,显示了不正确的行号



我正在使用httpwebrequest和httpwebresponse向外部API发送请求。

每当XML请求中存在错误时,由于XML节点中传递了一些错误的值,就有一个400不良请求错误响应,并且错误消息是" XML文档(51,14(中有错误"。问题是,如果请求XML有错误,则响应XML应显示具有正确行号的错误消息。但是我正在收到一条错误消息,其中有不正确的行号,并且总是" XML文档(1,1254(中存在错误"。实际上,第1行没有错误。由于此问题,我没有机会在故障排除时指出错误。

您可以帮助我如何通过xml中的正确行号获得响应。

以下是我现有的VB中的代码将请求发送到API。

Dim Wreq As HttpWebRequest
Dim MyURI As String = String.Empty
Dim bytes() As Byte
Try
MyURI = p_strURL
Wreq = HttpWebRequest.Create(MyURI)
Wreq.Method = "POST"
bytes = System.Text.Encoding.UTF8.GetBytes(pi_strRequestXML)
Wreq.ContentLength = bytes.Length 'pi_strRequestXML.Length
Wreq.ContentType = "application/x-www-form-urlencoded"
Wreq.KeepAlive = False
Wreq.Headers.Add("Authorization", "bearer" + " " + strAccessToken)
Using OutputStream As StreamWriter = New StreamWriter(Wreq.GetRequestStream())
OutputStream.Write(pi_strRequestXML)
End Using
Using Wres As HttpWebResponse = Wreq.GetResponse()
Using loResponseStream As StreamReader = New StreamReader(Wres.GetResponseStream())
oResponse = loResponseStream.ReadToEnd()
End Using
End Using
Return oResponse
Catch e As WebException
Throw
Catch objSysEx As Exception
Throw
Finally
End Try

谢谢

最后,我可以找到并解决此问题。问题是我要发送的请求XML。请求XML的格式未正确,因此如果XML中存在错误,则显示不适当的行号。解决方案是用适当的凹痕格式化请求XML。以下是我用来制作XML良好的代码。

Using sw As New StringWriterWithEncoding(Encoding.UTF8)
    Using tw As New XmlTextWriter(sw)
     'tw.Settings.Encoding = Encoding.UTF8
      tw.Formatting = Xml.Formatting.Indented
      tw.Indentation = 4
      Dim docu As New XmlDocument
      docu.LoadXml(strXML)
      docu.Save(tw)
      strProfileXML = Convert.ToString(sw)
   End Using
End Using

在上述代码中,StringWriterWithEncoding是用于使用UTF-8编码创建格式化的XML的函数。如果未使用此功能,则将使用UTF-16

创建XML

以下是用于设置XML

编码的函数
Private NotInheritable Class StringWriterWithEncoding
        Inherits StringWriter
        Private ReadOnly m_encoding As Encoding
        Public Sub New(encoding As Encoding)
            m_encoding = encoding
        End Sub
        Public Overloads Overrides ReadOnly Property Encoding() As Encoding
            Get
                Return m_encoding
            End Get
        End Property
    End Class

相关内容

最新更新