WCF Webhook服务,如何将POST消息流转换为有用的数据?

时间:2014-10-07 23:49:19

标签: .net vb.net wcf wcf-data-services

晚上好,我正在尝试构建一个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

1 个答案:

答案 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