如何访问HTTP Post WebHook中的特定Post参数?

时间:2018-02-27 00:20:46

标签: c# http-post azure-functions webhooks jotform

我正在使用JotForms使用WebHook集成发送POST消息。这是发送的消息。

RequestBin Message

我正在使用Azure Functions在C#中实现WebService,以便将表单中的值插入到SQL-Server中。

    #r "System.Data"
    using System.Net;
using System.Data;
using System.Data.SqlClient;
using Newtonsoft.Json;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    string name = "";

    dynamic body = await req.Content.ReadAsStringAsync();
    log.Info(body);

    var e = JsonConvert.DeserializeObject<Person>(body as string);

    name = e.firstname + " " + e.lastname;

    //Connect to SQL

    var cnnString  = "Server=tcp:XXXX.database.windows.net,1433;"+"Initial Catalog=XXXX;"
+"Persist Security Info=False;"+"User ID=XXX;"+"Password=XXXX;"+"MultipleActiveResultSets=False;"
+"Encrypt=True;"+"TrustServerCertificate=False;"+"Connection Timeout=30;";

    using (SqlConnection conn = new SqlConnection(cnnString))
    {
        conn.Open();

        // Insert Signup        
        var signupInsert = "INSERT INTO [dbo].[test_data] ([firstname],[lastname],[date])" +  
        "VALUES ('" + e.q8_FirstName + "','" + e.q9_yTus + "','" + e.q24_Birthday + "')";

        // Execute and load data into database.
        using (SqlCommand cmd = new SqlCommand(signupInsert, conn))
        {
            var rows = cmd.ExecuteNonQuery();
        }

    return name == " "
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Ok" );
    }
}

public class Person{
    public string firstname {get;set;}
    public string lastname {get;set;}
    public string date {get;set;}

    public string q8_FirstName {get;set;}
    public string q9_yTus {get;set;}
    public string q24_Birthday {get;set;}

}

当我用一个只是JSON的身体进行测试时,我已成功插入成功

{
    "firstname": "ni\u00f1o",
    "lastname": "Lachner2",
    "date":"08/08/1994",

    "name":"Vincenz2",
    "slug":"submit\/80565829893878\/",
    "input_language":"Espa\u00f1ol",
    "q8_FirstName":"Nombre",
    "q9_yTus":"Apellido",
    "q24_Birthday":"08\/08\/1994",
    "q5_cedula":"115850853",
    "q18_country":"Costa Rica",
    "dropdown_search":"",
    "q3_province":"San Jos\u00e9",
    "q11_cantonSanJose":"Alajuelita",
    "q12_cantonAlajuela":"",
    "q13_cantonHeredia":"",
    "q14_cantonCartago":"",
    "q15_cantonPuntarenas":"",
    "q16_cantonPuntarenas":"",
    "q17_cantonGuanacaste":"",
    "q6_phone":"88141833",
    "q2_mail":"vincenz.lachner@gmail.com",
    "q7_shirtSize":"S",
    "q25_channel":{"0":"Correo electr\u00f3nico","other":"YOU"},
    "q27_politicaDe":"Accepted",
    "preview":"true"

}

如何在rawRequest中访问JSON?那是RawBody,名为rawRequest。

这些分隔符是什么? -------------------------- e5d83c25c3d6dcc0

--------------------------e5d83c25c3d6dcc0
Content-Disposition: form-data; name="rawRequest"

{"slug":"submit\/80565829893878\/","input_language":"Espa\u00f1ol","q8_FirstName":"textbox_sample0","q9_yTus":"textbox_sample1","q24_Birthday":"11\/11\/1111","q5_cedula":"1","q18_country":"Costa Rica","dropdown_search":"","q3_province":"San Jos\u00e9","q11_cantonSanJose":"Alajuelita","q12_cantonAlajuela":"","q13_cantonHeredia":"","q14_cantonCartago":"","q15_cantonPuntarenas":"","q16_cantonPuntarenas":"","q17_cantonGuanacaste":"","q6_phone":"1","q2_mail":"john@example.com","q7_shirtSize":"XS","q25_channel":["Facebook"],"q27_politicaDe":"Accepted","preview":"true"}

1 个答案:

答案 0 :(得分:1)

如果您从JotForms发送消息,您可以使用以下代码来获取 rawRequest或者你可以得到漂亮的属性值,即JotForms中的字段。

以下是我的详细步骤:

1.创建JotForms

enter image description here

2.添加以下代码以获取rawRequest

  if (req.Content.IsMimeMultipartContent())
     {
          var content = await req.Content.ReadAsMultipartAsync();
          var test = content.Contents.ToList();
          Dictionary<string, string> dic = new Dictionary<string, string>();
          foreach (var item in test)
          {
              var value = await item.ReadAsStringAsync();
              dic.Add(item.Headers.ContentDisposition.Name, value);
              log.Info(value);
          }
          foreach (var item in dic)
          {
             log.Info($"{item.Key}:{item.Value}");
          }
     }

3。远程调试就在我身边。

enter image description here