Content-Type boundary 問題

我並不知道問題怎麼描述清楚一些。json

事情是這樣的,使用  Microsoft Dynamics CRM Server 2016 作CRM系統的時候用到 使用 Web API 執行批處理操做(參見SDK或者 https://msdn.microsoft.com/zh-cn/mt607719 ).c#

官方只給出 相應報文的 文本。告訴你 響應頭 怎麼寫,相應體 怎麼寫,而我要作的是用c# 實現它。api

首先 我使用了 谷歌瀏覽器 的一個插件,叫 postmen ,第一次聽同窗提及,還下載錯了,下載了 成了 桌面應用程序,其實 是插件。瀏覽器

爲啥我用插件呢,由於網站須要登陸才能調API啊。須要共享祕鑰。app

 

就長這樣哈。post

而後照着官網的例子,改改就測試經過了。測試

接下來 就要寫 c#代碼了。網站

而後遇到問題了。ui

不知道怎麼 生成Content-Type: multipart/mixed;boundary=changeset_BBB456 !!!url

首先嚐試了HttpClient  類, DefaultRequestHeaders.TryAddWithoutValidation  方法試了試,不行,位置不對。

StringContent 類試了試 也不行。

最後發現 了 MultipartContent類,果斷能夠了。

代碼以下哈,由於裏面有項目封裝的一些東西,copy過去 是不能用的哈,意思就這意思。

 

    public static ApiResult PostBatch()
        {
            object obj = new object();
            string url = "$batch";

            var batchUniqueIdHeader = "batch_AAA123";//Guid.NewGuid().ToString();

            ICredentials credentials = null; EnsureCredentials(ref credentials);
            using (var client = new CRMClient(credentials, null))
            {
                var data = new
                {
                    neo_phonesysstatus = 110000001
                };
                var multipartContent = new MultipartContent("mixed", "batch_AAA123");
                var stringContent = new StringContent(string.Format(@"
            --{0}
            Content-Type: application/http
            Content-Transfer-Encoding:binary
            Content-ID: 1

            PATCH  http://dev.crm.xiaoniu66.com/DevCRM/api/data/v8.0/neo_marketings(B1D14BC0-2B6B-E611-80C4-005056A97E8D) HTTP/1.1
            Content-Type: application/json;type=entry

            {1}

            --{0}--
            ", "changeset_BBB456", data.ToJson()));
                stringContent.Headers.Clear();
                stringContent.Headers.Add("Content-Type", "multipart/mixed;boundary=batch_AAA123");
                multipartContent.Add(stringContent);
                HttpResponseMessage response = client.PostAsync(url, multipartContent).Result;
                var result = HandleApiResult(response);
                return result;
            }
        }

 

 

 其中 遇到的幾個問題是,要記住 響應頭 必須 和 相應體 中間隔着空行。

相關文章
相關標籤/搜索