如何编写代码在C#console中的application / form-data中发布文件?

时间:2016-12-15 05:45:42

标签: c# httprequest httpresponse

我在Windows中使用Post Man将 application / form-data 中的文件发布到如下所示的网址中。,

  http://{host}:{port}/file

表单数据中的文件是..,

  file "C:/Temp/file.txt"

在postMan中它起作用了。

但是我想在C#控制台应用程序中编写代码来执行此操作。

我是新手。所以请任何人在C#中的 Post Method {application / form-data} 中提供任何方法来编写代码来处理文件作为url的一部分。 how-to-fill-forms-and-submit-with-webclient-in-c-sharp

我已查看附件链接。

它只有代码才能传递" application / x-www-form-urlencoded"

但我需要" application / form-data" 的代码。

注意:我在该链接中尝试了以下代码,它仅显示415不支持的媒体类型错误。

var encoding=new ASCIIEncoding();
var postData="C:/test.csv";
byte[]  data = encoding.GetBytes(postData);

var myRequest =
  (HttpWebRequest)WebRequest.Create("http://localhost/MyIdentity/Default.aspx");
myRequest.Method = "POST";
myRequest.ContentType="application/form-data";
myRequest.ContentLength = data.Length;
var newStream=myRequest.GetRequestStream();
newStream.Write(data,0,data.Length);
newStream.Close();

var response = myRequest.GetResponse();
var responseStream = response.GetResponseStream();
var responseReader = new StreamReader(responseStream);
var result = responseReader.ReadToEnd();

responseReader.Close();
response.Close();

2 个答案:

答案 0 :(得分:1)

我相信你应该尝试多部分表单数据而不是应用程序/表单数据。 我已成功将PowerPoint文件发布到ASP.NET MVC Controller以处理服务器上的文件。 以下是显示如何使用多部分表单内容类型上传文件的link

答案 1 :(得分:1)

此代码仅适用于" multipart / form-data"

//Convert each of the three inputs into HttpContent objects
                byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);

                HttpContent bytesContent = new ByteArrayContent(fileBytes);

                // Submit the form using HttpClient and 
                // create form data as Multipart (enctype="multipart/form-data")

                using (var client = new System.Net.Http.HttpClient())
                using (var formData = new MultipartFormDataContent())
                {
                    // <input type="text" name="filename" />
                    formData.Add(bytesContent, "filename", Path.GetFileName(filePath));

                    // Actually invoke the request to the server

                    // equivalent to (action="{url}" method="post")
                    var response = client.PostAsync(url, formData).Result;

                    // equivalent of pressing the submit button on the form
                    if (!response.IsSuccessStatusCode)
                    {
                        return null;
                    }
                    return response.Content.ReadAsStreamAsync().Result;
                }