Steve
Steve

Reputation: 4503

How to send json data over using Flurl?

Currently I have working code which uses Flurl to issue http post request to my endpoint.

string endPoint = "/api/abcs/";
string url = string.Format("{0}{1}{2}", baseUrl, endPoint, clientId);
var response = await url.SetQueryParams(id, code)         
            .PostMultipartAsync(mp => mp
            .AddString("field1", postData.field1)
            .AddString("field2", postData.field2)
            .AddString("field3", postData.field3)
            );

This code works. In my endpoint, I can get my data for field1, field2, field3. But now in field4, I have file upload data. So I serialize the object to json. Below, is my amended code.

string endPoint = "/api/abcs/";
var myContent = JsonConvert.SerializeObject(postData);
var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

string url = string.Format("{0}{1}{2}", baseUrl, endPoint, ecddClientId);
var response = await url.SetQueryParams(id, code)         
            .PostMultipartAsync(mp => mp
            .AddJson("json", myContent));

But, now when I debug it at my endpoint, I can't see the data already.

This is my endpoint code

[HttpPost]
public async Task<IHttpActionResult> PutHello(int id, string code)
{
    string root = Path.GetTempPath();
    var provider = new MultipartFormDataStreamProvider(root);

    // Read the form data.
    await Request.Content.ReadAsMultipartAsync(provider);

    var field1 = provider.FormData["field1"];
    var field2 = provider.FormData["field2"];
    var field3 = provider.FormData["field3"];
    var field4 = provider.FormData["field4"];
}

Upvotes: 0

Views: 1558

Answers (1)

MD. RAKIB HASAN
MD. RAKIB HASAN

Reputation: 3956

mulipart/form-data requests will be supported in Flurl.Http 1.0 via the following syntax:

var resp = await "http://api.com".PostMultipartAsync(mp => mp
    .AddString("name", "hello!")                // individual string
    .AddStringParts(new {a = 1, b = 2})         // multiple strings
    .AddFile("file1", path1)                    // local file path
    .AddFile("file2", stream, "foo.txt")        // file stream
    .AddJson("json", new { foo = "x" })         // json
    .AddUrlEncoded("urlEnc", new { bar = "y" }) // URL-encoded                      
    .Add(content));                             // any HttpContent

Ref: Link

Upvotes: 1

Related Questions