Dynamics CRM C# 插件 - 第一次使用 API

Dynamics CRM C# Plugin - First time with API

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

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

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

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

第 1 步当然是从网站生成一个授权令牌。 这需要以这种形式传递(我假设是JSON)。 但是我什至无法弄清楚如何做那部分,或者代码应该是什么样子。如果有人有他们做过的事情的例子,或者可以给我指出一个 link/video 来解决这个问题,那就太棒了。

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

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

对于手头的问题: 大摇大摆的文档告诉你所有你需要知道的来调用你的服务, 以auth服务为例,首先我们需要知道该服务使用的是什么方法,在本例中是post。 现在我们需要知道可以调用该服务的地址。在文档中指定为:https://app.fasttestweb.com/FastTest/api/auth/simple 我们发送什么:

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

切换到模型可以看到参数说明。您甚至可以直接在页面中测试这一点,方法是使用给定的值编辑可编辑框,然后按端点规范底部的 "try it out!"。

我们得到什么回应:

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

要调用它,有很多方法可以做到这一点,我喜欢将我发送和接收的内容分开 objects/dto,然后 serialize/deserialize 从那个对象到那个对象。由于您已经拥有 json.net,因此您可以这样做 serialize

您可以指定特定的 json 名称,使其与具有 attribute 的架构相匹配 或者定义一个 strategy.

当您从服务中取回 json 时,您将不得不 deserialize 它。

所以你的 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,普通客户端被称为 HttpClient 而不是 RestClient,如果你想 google 它。

希望对您有所帮助。