【问题标题】:Dynamics CRM C# Plugin - First time with APIDynamics CRM C# 插件 - 第一次使用 API
【发布时间】:2020-01-17 21:59:10
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c# api json.net dynamics-crm microsoft-dynamics


    【解决方案1】:

    作为开发人员,如何调用静态 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 名称,使其与带有 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 的库来调用rest 服务,它在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代替参数设置body,您不必自己序列化您的对象,更多信息可在RestSharp获得. 如果你不想使用RestSharp,如果你想google一下,普通客户端称为HttpClient而不是RestClient。

    希望对你有帮助。

    【讨论】:

    • 这很漂亮。非常感谢你。 (抱歉延迟回复)。我认为这是新手可以期望的最好解释,而且超出了我的预期。你真的超越了,为此我非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多