晚上好,我正在尝试构建一个WCF服务,该服务将收听来自网站的webhook电话,在我的案例中是www.formstack.com。我能够使WCF服务工作并接受数据,但流和/或消息格式将作为长URL格式的文本字符串而不是XML返回。我已经查看了formstack,它没有任何其他方式来格式化消息。
这是返回的内容。我最终需要这种格式,然后我可以将它提交给数据库。
FormID = 1730225&放大器;的UniqueID = 166942101&放大器;门票+数=&放大器;系统+数=&放大器;客户+数=&放大器;客户+名称=&放大器;你+名称=布拉德+斯温德尔和放大器;电子邮件=安培;得分= 10 。+ - +非常+可能的和放;这+拥有+%3D +和+%26 +符号%27S +在+资讯科技及电讯附加+反馈=这是+%22A +测试%22%2C +;将+你+喜欢+本+调查+至+是+匿名%3F =否安培;技术=和ID =
我可以尝试解析文字&和=然后替换+。但我必须抓住其他所有符号。有没有更好的方法来解决这个问题?
这是我目前的代码:
Public Function PostSampleMethod(data As Stream) As String Implements IMyService.PostSampleMethod
Dim reader As New StreamReader(data)
Dim xmlString As String = reader.ReadToEnd()
Using w As StreamWriter = File.AppendText("C:\log.txt")
Log(xmlString, w)
End Using
Return Nothing
End Function
Formstack Webhook API - https://www.formstack.com/developers/webhooks
我想知道VB.Net是否有一个可以处理这个过程并解码/解析它的库,或者我是否会以错误的方式从POST获取数据?
任何帮助都将不胜感激。
谢谢大家的帮助。
Brad Swindell
答案 0 :(得分:0)
我以为我会提交已接受的解决方案。 HttpUtility类将POST数据解析为NameValueCollection,然后可以单独检索。
Public Function PostSampleMethod(data As Stream) As String Implements IMyService.PostSampleMethod
Dim reader As New StreamReader(data)
Dim xmlString As String = reader.ReadToEnd()
Dim httpResponse As NameValueCollection = HttpUtility.ParseQueryString(xmlString)
For i As Integer = 0 To httpResponse.Count - 1
Debug.WriteLine("{0} - {1}", {httpResponse.Keys(i), httpResponse.Item(i)})
Next
Using w As StreamWriter = File.AppendText("C:\log.txt")
Log(httpResponse.Get("FormID"), w)
Log(httpResponse.Get("UniqueID"), w)
Log(httpResponse.Get("HandshakeKey"), w)
End Using
Return Nothing
End Function
Brad Swindell