c# - Httpclient multipart/form-data 同时发布图片和json

标签 c# xamarin httpclient multipartform-data

我尝试使用 C# 代码在一个请求中上传图像和 json,但服务器总是返回 400- 错误请求。使用 fiddler 执行相同的请求返回状态代码 200。帮助...

这是我的 fiddler 代码:

------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="application/json" Content-Type: application/json

{"type": "Personal","comments": ["Lorem", "Ipsum" ] } ------WebKitFormBoundary7MA4YWxkTrZu0gW-- Content-Disposition: form-data; name="fieldNameHere"; filename="1111.jpg"

Content-Type: image/jpeg

<@INCLUDE C:\Users\user\Desktop\New folder\1111.jpg@>

以及在 C# 中的实现:

var boundary = "Upload----" + DateTime.Now.Ticks.ToString();
MultipartFormDataContent form = new MultipartFormDataContent(boundary);
StringContent content = new StringContent(bodyJson);
content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
form.Add(content, "application/json");

var imageContent = new ByteArrayContent(image);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg");
form.Add(imageContent, "image/jpeg", "image.jpg");
var responseTask = _httpClient.PostAsync(url, form).Result;

响应总是相同的:

enter image description here

最佳答案

您可以将参数作为字符串内容传递,检查下面的示例。

public async Task<JObject> ExecutePostAsync(Stream myStreem, string url, string token, string parameter1, string parameter2, string parameter3)
    {
        try
        {
            using (var content = new MultipartFormDataContent("----MyBoundary"))
            {

                using (var memoryStream = myStreem)
                {
                    using (var stream = new StreamContent(memoryStream))
                    {
                        content.Add(stream, "file", Guid.NewGuid().ToString() + ".jpg");
                        content.Add(new StringContent(parameter1), "parameter1");
                        content.Add(new StringContent(parameter3), "parameter2");
                        content.Add(new StringContent(parameter3), "parameter3");

                        using (HttpClient client = new HttpClient())
                        {
                            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
                            var responce = await client.PostAsync(url, content);
                            string contents = await responce.Content.ReadAsStringAsync();
                            return (JObject.Parse(contents));
                        }

                    }
                }
            }

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

在API中获取FORM请求的数据

    public async Task<IHttpActionResult> UploadFile()
    {

        string parameter1 = HttpContext.Current.Request.Form["parameter1"];
        string parameter2 = HttpContext.Current.Request.Form["parameter2"];
        string parameter3 = HttpContext.Current.Request.Form["parameter3"];

    }

关于c# - Httpclient multipart/form-data 同时发布图片和json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48164503/

相关文章:

c# - 自定义 oAuth 服务器实现及其优势

c# - 如何使用 LINQ 解析 OWL 文件(包含 RDF namespace )

android - 嵌套MvxGridView时,其Itemclick不起作用

C# 如何创建 KeyValuePair 的通用列表

java - 使用 HttpClient 4.3.x,为特定 URL 执行 HttpHead 会给出 NoHttpResponseException

c# - 在 C# 代码中构建 Silverlight DataTemplate

c# - WPF:如何在 DataGrid 中添加自定义列?

android - 无法绑定(bind)自定义 MvvmCross View

xamarin - 无法在 Visual Studio 2013 中为 PCL 配置文件 158 安装包 MvvmCross.PortableSupport 3.2.1

c# - 重用异步套接字 : subsequent connect attempts fail