usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Net;usingSystem.Threading.Tasks;publicasyncTask<string>UploadFile(string url,string filename,Dictionary<string,object> postData){var request = WebRequest.CreateHttp(url);var boundary =$"{Guid.NewGuid():N}";// boundary will separate each parameter
request.ContentType =$"multipart/form-data; {nameof(boundary)}={boundary}";
request.Method ="POST";using(var requestStream = request.GetRequestStream())using(var writer =newStreamWriter(requestStream)){foreach(var data in postData)await writer.WriteAsync(// put all POST data into request$"\r\n--{boundary}\r\nContent-Disposition: "+$"form-data; name=\"{data.Key}\"\r\n\r\n{data.Value}");await writer.WriteAsync(// file header$"\r\n--{boundary}\r\nContent-Disposition: "+$"form-data; name=\"File\"; filename=\"{Path.GetFileName(filename)}\"\r\n"+"Content-Type: application/octet-stream\r\n\r\n");await writer.FlushAsync();using(var fileStream = File.OpenRead(filename))await fileStream.CopyToAsync(requestStream);await writer.WriteAsync($"\r\n--{boundary}--\r\n");}using(var response =(HttpWebResponse)await request.GetResponseAsync())using(var responseStream = response.GetResponseStream()){if(responseStream ==null)returnstring.Empty;using(var reader =newStreamReader(responseStream))returnawait reader.ReadToEndAsync();}}
var response =await uploader.UploadFile("< YOUR URL >","< PATH TO YOUR FILE >",newDictionary<string,object>{{"Comment","test"},{"Modified", DateTime.Now }});