Reputation: 4503
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
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