【问题标题】:multipart/form-data content type requestmultipart/form-data 内容类型请求
【发布时间】:2015-09-05 11:31:15
【问题描述】:

我正在使用以下代码发布具有multipart/form-data 内容类型的请求,但出现异常:

远程服务器返回错误:(532)。

我该如何解决这个问题?

public void request222(string cgid)
{
    NameValueCollection nvc = new NameValueCollection();
    nvc.Add("action:WebManager", "OK");
    nvc.Add("cg_id", "" + cgid + "");

    var boundary = "---------------------------DateTime.Now.Ticks.ToString("x")";

    //creating request
    var wr = (HttpWebRequest)WebRequest.Create("http://189.126.121.79:8093/API/CCG");
    wr.ContentType = "multipart/form-data; boundary=" + boundary;
    wr.Method = "POST";
    wr.KeepAlive = true;

    //sending request
    using (var requestStream = wr.GetRequestStream())
    {
        using (var requestWriter = new StreamWriter(requestStream, Encoding.UTF8))
        {
            //params
            const string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
            foreach (string key in nvc.Keys)
            {
                requestWriter.Write(boundary);

                requestWriter.Write(String.Format(formdataTemplate, key, nvc[key]));
            }
            requestWriter.Write("\r\n--" + boundary + "--\r\n");
        }
    }

    //reading response
    try
    {

        using (var wresp = (HttpWebResponse)wr.GetResponse())
        {
            if (wresp.StatusCode == HttpStatusCode.OK)
            {
                using (var responseStream = wresp.GetResponseStream())
                {
                    if (responseStream == null)

                    using (var responseReader = new StreamReader(responseStream))
                    {
                        string s= responseReader.ReadToEnd();
                    }
                }
            }

            throw new ApplicationException("Error Server status code: " + wresp.StatusCode.ToString());
        }
    }
    catch (Exception ex)
    {
        throw new ApplicationException("Error while uploading file", ex);
    }
}

【问题讨论】:

  • 这是服务器错误,因此您的请求可能无效。无论是因为它是语义错误的 HTTP 还是根据 API 的错误请求消息,您都可以弄清楚。

标签: c# http post multipartform-data


【解决方案1】:

与其自己实现它,不如考虑使用新的 API:HttpClient 类。它有support 代表multipart/form-data

有关实际示例,请参见例如this answer on another question

另外,最好只使用application/x-www-form-urlencoded,因为您的请求中没有发布任何文件(至少在您提供的示例中)

【讨论】:

  • 尝试了一个 Http 客户端,但连接错误:HttpClient c = new HttpClient(); var formData = new FormUrlEncodedContent(new[] { new KeyValuePair("action:WebManager", "OK"), new KeyValuePair("cg_id", cgid) }); MultipartContent 内容 = 新的 MultipartContent(); content.Add(formData); var result = c.PostAsync("189.126.121.79:8093/API/CCG", content).Result;
  • 您不应将FormUrlEncodedContentMultipartContent 混用。请参阅此处的示例:stackoverflow.com/a/15176685/332528
猜你喜欢
  • 1970-01-01
  • 2017-02-05
  • 2013-08-08
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多