zoukankan      html  css  js  c++  java
  • Content-Type boundary 问题

    我并不知道问题怎么描述清楚一些。

    事情是这样的,使用  Microsoft Dynamics CRM Server 2016 做CRM系统的时候用到 使用 Web API 执行批处理操作(参见SDK或者 https://msdn.microsoft.com/zh-cn/mt607719 ).

    官方只给出 相应报文的 文本。告诉你 响应头 怎么写,相应体 怎么写,而我要做的是用c# 实现它。

    首先 我使用了 谷歌浏览器 的一个插件,叫 postmen ,第一次听同学说起,还下载错了,下载了 成了 桌面应用程序,其实 是插件。

    为啥我用插件呢,因为网站需要登录才能调API啊。需要共享秘钥。

    就长这样哈。

    然后照着官网的例子,改改就测试通过了。

    接下来 就要写 c#代码了。

    然后遇到问题了。

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

    首先尝试了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;
                }
            }

     其中 遇到的几个问题是,要记住 响应头 必须 和 相应体 中间隔着空行。

  • 相关阅读:
    NHibernate版本不一致问题
    .NET中AOP的几种实现方案
    转播
    看来不得不来谈谈这个首页精华区了
    事件与委托
    关于字符集和字符编码以及代码页的前前后后(续)
    让电脑像人脑一样思考,谁养鱼问题断言推理解法
    关于那个脑袋的很漂漂的图形的C#版本
    大家都有头像,我来测试下我的新头像。
    浅谈JavaScript中的对象和类型(上)
  • 原文地址:https://www.cnblogs.com/bingguang/p/5811329.html
Copyright © 2011-2022 走看看