c# - 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,但我无法找到有关如何实际来回传递信息的好示例。先感谢您。
解决方案
作为开发人员,如何在休息时调用 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。
希望能帮助到你。
推荐阅读
- hadoop - 安装hdp-3.0时找不到与redhat6匹配的操作系统错误
- gmail - Sendmail 和反向 ipv6
- php - 如何在 Yii 中将 URL 的语言更改为单一语言?
- java - WebDriver - 捕获的屏幕截图似乎具有红色或橙色色调
- google-cloud-platform - 如何在 Google Cloud Platform 上为多个虚拟机和项目共享单个云存储
- amazon-web-services - AWS S3 - 基于 Cognito 令牌管理权限
- virtualbox - 为 Virtual boxx 配置两个 IP
- amazon-web-services - .NET Core - AWS KMS - EncryptionMaterials 问题
- javascript - 为什么我不能使用第一个代码移动图片?
- apache-spark - Spark结构化流大文件