首页 > 解决方案 > Dynamics CRM C# 插件 - 第一次使用 API

问题描述

虽然我已经在 Dynamics 中进行了一段时间的开发,但我以前从未需要对 API 进行外部调用。

我不知道从哪里开始。任何帮助我指出正确的方向都会非常有帮助。

有问题的 Api 位于此处: http ://apidocs.assess.com/

里面有一些例子显示需要传递给 url ( https://app.fasttestweb.com/FastTest/api/swagger.json ) 但老实说,这是我第一次尝试这个,我对我一直在寻找的信息感到不知所措,并且无法解析为此需要做的事情。

第 1 步当然是从站点生成身份验证令牌。这需要以这种形式传递(我假设是 JSON)。但是我很难弄清楚如何做那部分,或者代码应该是什么样子。如果有人有他们做过的事情的例子,或者可以指向我的链接/视频,那就太棒了。

请注意,我确实在 Visual Studio 中安装了 Newtonsoft.Json,但我无法找到有关如何实际来回传递信息的好示例。先感谢您。

标签: c#apijson.netdynamics-crmmicrosoft-dynamics

解决方案


作为开发人员,如何在休息时调用 API 是一种非常常见的做法,因为这是公开数据的常见做法,我强烈建议您阅读该主题,那里有很多好的资源,这个网站是一个和 youtube是另一个,快速搜索并发现了很多:https ://www.youtube.com/results?search_query=intro+to+rest+c%23

对于手头的问题:swagger 文档告诉您在调用服务之后需要知道的一切,以 auth 服务为例,首先我们需要知道服务使用哪种方法,在这种情况下是 post。现在我们需要知道我们可以调用服务的地址。在文档中指定为:https ://app.fasttestweb.com/FastTest/api/auth/simple 我们发送什么:

{
  "username": "string",
  "pwd": "string",
  "apiKey": "string",
  "timeSent": 0,
  "tokenTTL": 0
}

如果你切换到模型你可以看到参数的描述。您甚至可以直接在页面中进行测试,方法是使用您给定的值编辑可编辑框,然后按“试试看!” 在端点规范的底部。

我们得到什么回应:

{
  "apiToken": "string",
  "timeGenerated": 0,
  "ttl": 0
}

调用它,有很多方法可以做到这一点,我喜欢为我发送和接收的内容制作单独的对象/dto,然后从该对象序列化/反序列化它们。既然你已经有了 json.net,那么这里就是你如何进行serialize的。

您可以指定特定的 json 名称,使其与具有属性的架构匹配 或定义策略

当您从服务中取回 json 时,您将不得不反序列化它。

因此,例如,您的 body obj 看起来像这样

 public class AuthBody
    {
        [JsonProperty("username")]
        public string UserName { get; set; }

        [JsonProperty("pwd")]
        public string Password { get; set; }

        [JsonProperty("apiKey")]
        public string ApiKey { get; set; }

        [JsonProperty("timeSent")]
        public int TimeSent { get; set; }

        [JsonProperty("tokenTTL")]
        public int TokenTimeToLive { get; set; }
    }

只需以类似的方式设置响应。我喜欢使用一个名为RestSharp的库来调用休息服务,它在 nuget 上可用。这是一个非常基本的代码示例(未经测试):

var body = new AuthBody()
            {
                UserName = "value",
                Password = "value",
                ApiKey = "value",
                TimeSent = 123,
                TokenTimeToLive = 10000
            };
            var json = JsonConvert.SerializeObject(body);

            var client = new RestClient("https://app.fasttestweb.com/FastTest/api");

            var request = new RestRequest("auth/simple", Method.POST, DataFormat.Json);
            request.AddParameter("application/json", json, ParameterType.RequestBody);

            var jsonResponse = client.Execute(request);
            AuthResponse authResponse = JsonConvert.DeserializeObject<AuthResponse>(jsonResponse.Content);

如果需要,您还可以将 restsharp 的默认序列化程序设置为 json.net,然后您可以使用 addJsonBody 而不是参数设置正文,您不必自己序列化对象,更多信息可在RestSharp上获得。如果您不想使用 RestSharp,如果您想 google 一下,普通客户端称为 HttpClient 而不是 RestClient。

希望能帮助到你。


推荐阅读