当前位置: 首页 > 知识库问答 >
问题:

HttpClient Post MultipartFormDataContent与JToken和字符串返回404错误

阎裕
2023-03-14

我需要发布一个请求包含:一个定义为字符串的xml和一个json。我在正确设置内容和处理JToken方面遇到了问题。
在Fiddler中,原始请求如下所示:

内容类型:多部分/表单数据;boundary=----------------------------acebdf13572468用户代理:Fiddler授权:基本QURNSU46QURNSU4=内容长度:888主机:本地主机

---------------------------acebdf13572468内容处理:表单数据;name=“fieldNameHere”;filename=“testfile2.txt”内容类型:文本/普通

这是第二个测试文件,用于eB EC插件测试环境中的文件管理测试---------------------------acebdf13572468内容处理:表单数据;name=“fieldNameHere”内容类型:application/json

{“实例”:{“类名”:“文件”、“模式名”:“EB”、“关系实例”:[{“方向”:“向后”,“类名”:“文档文件”、“模式名”:“EB”、“关系实例”:{“类名”:“文档”、“模式名”:“EB”、“实例ID”:“4”}],“属性”:{“名称”:“testfile2.txt”}}}

---------------------------acebdf13572468--

我有这个方法,得到404错误:

     public static string PostXMLStringAndJasonInOneRequest(int instanceId)
    {
        // Creating json that describes document with property 'name' 
        JObject documentToPost = CreateClassInstance("File", "eB", null, new KeyValuePair<string, object>("Name", "MyTestDocument.txt"));

        JObject relationship = CreateRelationshipClassInstance("DocumentFiles", "eB", null, "backward");

        // specifying document parent that is existing project with its id 
        JObject documentParent = CreateClassInstance("Document", "eB", instanceId.ToString());

        JToken json = CreateJson(documentToPost, relationship, documentParent);
        Uri uri = new Uri("http://localhost/wsg/v2.0/xxxx");

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Basic QURNSU46QURNSU4=");
            MultipartFormDataContent form = new MultipartFormDataContent();
            // TO-DO: save the xml string contents here
            HttpContent content = new ByteArrayContent(GetBytes("<node>this is a text</node>"));

            // HttpContent content = new StringContent("<node>this is a text</node>");
            content.Headers.Add("Content-Type", "application/xml");

            form.Add(content);

            // TO-DO Save json  - not hard coded the value of json
            string jsonText = @"{
                  ""instance"": {
                    ""className"": ""File"",
                    ""schemaName"": ""EB"",
                    ""relationshipInstances"": [
                       {
                          ""direction"": ""backward"",
                          ""className"": ""DocumentFiles"",
                          ""schemaName"": ""EB"",
                          ""relatedInstance"": {
                             ""className"": ""Document"",
                             ""schemaName"": ""EB"",
                             ""instanceId"": ""120""
                          }
                       }
                    ],
                    ""properties"": {
                        ""Name"": ""testfile2.xml""
                    }
                  }
                }";

            HttpContent jsonContent = new ByteArrayContent(GetBytes(jsonText));
            jsonContent.Headers.Add("Content-Type", "application/json");
            // TO-DO put json not jsonText
            form.Add(jsonContent);
            HttpResponseMessage response = client.PostAsync(uri, form).Result;
            if (response.StatusCode != HttpStatusCode.Created)
            {
                return "error"; // handle error 
            }
            return response.Content.ReadAsStringAsync().Result;
        }
    }

共有1个答案

唐向荣
2023-03-14
// To create multipartcontent 

    // 404 is an error in my url address

        private static HttpContent CreateMultipartContent(JToken json, Stream file, string fileName)
                {
                    MultipartContent content = new MultipartContent("form-data", Guid.NewGuid().ToString());

                    StringContent jsonPart = new StringContent(json.ToString());
                    jsonPart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
                    jsonPart.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                    StreamContent filePart = new StreamContent(file);
                    filePart.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
                    filePart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
                    filePart.Headers.ContentDisposition.FileName = fileName;

                    content.Add(jsonPart);
                    content.Add(filePart);

                    return content;
                }    
    private static HttpContent CreateMultipartContent(JToken json, string markupText, string fileName)
                        {
                            MultipartContent content = new MultipartContent("form-data", Guid.NewGuid().ToString());

                            StringContent jsonPart = new StringContent(json.ToString());
                            jsonPart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
                            jsonPart.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                            StringContent filePart = new StringContent(markupText);
                            filePart.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
                            filePart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
                            filePar`enter code here`t.Headers.ContentDisposition.FileName = fileName;

                            content.Add(jsonPart);
                            content.Add(filePart);

                            return content;
                        }
 类似资料:
  • 我有一个运行在后端的Node/Express服务器和一个react前端,我正在尝试制作最简单的API——但无论我做什么,我似乎都在post请求中遇到了404错误。我已尝试将代理添加到包中。json,删除代理并在地址i中包含端口。。Ehttp://localhost:5000/createaccount,包括http://localhost:5000只需在post请求中使用“/createaccou

  • JSoup-1.8.1 尝试{ Document Document=Jsoup.connect(url.get(); 返回Document.getElementsByTag(“title”).text(); }catch(异常e){ System.out.println(e); 返回null; } org.jsoup.HttpStatusExc0019: HTTP错误获取URL。状态=404, U

  • 场景:用于编辑产品详细信息的HTML文档被编码为ISO-8859-1,并将POST数据发送到PHP文件(也被编码为ISO-8859-1)。这个PHP文件有mysql_real_escape_string-functions来清理输入。数据库/MySQL server字符集为UTF-8。问题是,当POST字符串中包含斯堪的纳维亚字母(ä,ö,å)时,mysql_real_escape_string返

  • GETRANGE key start end 返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。 注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在stop右边, 返回空字符串

  • 问题内容: 我有一个返回字符串的Java实例方法,我正在C ++中通过JNI调用此方法。我写了以下代码: 如何获取字符串并将其转换为const char *? 我的程序在访问冲突为0x00000000的最后一行崩溃。returnString不是NULL。 问题答案: 根据,最后一个参数是的指针。 更改 至 或者更好的是,返回一个 我建立了一个类似的简单示例,到目前为止,代码看起来还不错。 虽然,有

  • 问题内容: 我犹豫要问这个问题,因为它看起来很奇怪。但不管怎么说。以防万一有人已经遇到了相同的问题…文件系统功能(fopem,file,file_get_contents)对于http://包装器表现得很奇怪 它似乎有效。 没有提出错误 。fopen()返回资源。 它不会为所有肯定有效的网址返回任何数据(例如)。 文件返回空数组,file_get_contents()返回空字符串,fread返回f