
# 应用侧.NET SDK使用指南
物联网平台提供C#语言的应用侧SDK供开发者使用。本文介绍应用侧 .NET SDK的安装和配置，及使用.NET SDK调用[应用侧API](https://support.huaweicloud.com/api-iothub/iot_06_v5_0001.html)的示例。
#### SDK获取和安装
1. 安装.NET开发环境。 
   访问[.NET官网](https://dotnet.microsoft.com/download)，下载并按说明安装.NET开发环境。
   ![](https://support.huaweicloud.com/sdkreference-iothub/public_sys-resources/note_3.0-zh-cn.png)
   华为云.NET SDK适用于：
   - **.NET Framework 4.5** 及其以上版本。
   
   - **.NET Standard 2.0** 及其以上版本。
   
   - **C# 4.0** 及其以上版本。
    
   
   
2. 使用 .NET CLI 工具安装SDK 
   ```
   dotnet add package HuaweiCloud.SDK.Core
   dotnet add package HuaweiCloud.SDK.IoTDA
   ```
   
   
 
#### 代码示例
以调用[查询设备列表](https://support.huaweicloud.com/api-iothub/iot_06_v5_0048.html)接口为例，以下代码示例向您展示使用.NET SDK的主要步骤：
1. 创建认证。
2. 创建BasicCredentials实例并初始化。
3. 实例化请求对象。
4. 调用查询设备列表接口。 
   ```
   using System;
   using System.Collections.Generic;
   using HuaweiCloud.SDK.Core;
   using HuaweiCloud.SDK.Core.Auth;
   using HuaweiCloud.SDK.IoTDA;
   using HuaweiCloud.SDK.IoTDA.V5;
   using HuaweiCloud.SDK.IoTDA.V5.Model;
   namespace ListDevicesSolution
   {
       class Program
       {
           static void Main(string[] args)
           {
               var listDevicesRequest = ListDevices();
               var res = JsonUtils.Serialize(listDevicesRequest.Result);
               Console.WriteLine(res);
           }
          private static async Task<ListDevicesResponse> ListDevices()
           {
               // 认证用的ak和sk直接写到代码中有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
               // 本示例以ak和sk保存在环境变量中为例，运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
               var ak = Environment.GetEnvironmentVariable("HUAWEICLOUD_SDK_AK", EnvironmentVariableTarget.Machine); 
               var sk = Environment.GetEnvironmentVariable("HUAWEICLOUD_SDK_SK", EnvironmentVariableTarget.Machine);
               const string projectId = "<YOUR PROJECTID>";
               // region_id：如果是上海一，请填写"cn-east-3"；如果是北京四，请填写"cn-north-4"；如果是华南广州，请填写"cn-south-1"
               const string regionId = "<YOUR REGION ID>";
               // endpoint：请在控制台的"总览"界面的"平台接入地址"中查看"应用侧"的https接入地址
               const string endpoint = "<YOUR ENDPOINT>";
               // 创建认证
               var auth = new BasicCredentials(ak, sk, projectId);
               // 标准版/企业版需要使用衍生算法，基础版请删除该配置
               auth.WithDerivedPredicate(BasicCredentials.DefaultDerivedPredicate);
               var config = HttpConfig.GetDefaultConfig();
               config.IgnoreSslVerification = false;
               // 创建IoTDAClient实例并初始化
               var client = IoTDAAsyncClient.NewBuilder()
                       .WithCredential(auth)
                       .WithHttpConfig(config)
                      // 标准版/企业版需要自行创建region 
                       .WithRegion(new Region(regionId, endpoint))
                      // 基础版使用默认 IoTDARegion中的region对象
                      // .WithRegion(IoTDARegion.CN_NORTH_4)
                      // net framework不支持在get请求头中有content-type
                    // 配置是否忽略SSL证书校验， 默认不忽略
                      // .WithHttpConfig(new HttpConfig().WithIgnoreBodyForGetRequest(true).WithIgnoreSslVerification(true)) 
                       .Build();
               // 实例化请求对象
               var req = new ListDevicesRequest
               {
               };
               try
               {
                   // 调用查询设备列表接口
                   var resp =await client.ListDevicesAsync(req);
                   Console.WriteLine(resp.GetHttpStatusCode());
                   return resp;
               }
               catch (RequestTimeoutException requestTimeoutException)
               {
                   Console.WriteLine(requestTimeoutException.ErrorMessage);
               }
               catch (ServiceResponseException clientRequestException)
               {
                   Console.WriteLine(clientRequestException.HttpStatusCode);
                   Console.WriteLine(clientRequestException.ErrorCode);
                   Console.WriteLine(clientRequestException.ErrorMsg);
               }
               catch (ConnectionException connectionException)
               {
                   Console.WriteLine(connectionException.ErrorMessage);
               }
               return new ListDevicesResponse();
           }
       }
   }
   ```
   
   | 参数                     | 说明                                                                                                                                                                                                                                                                                                                                                      |
   |:---|:---|
   | ak                     | 您的华为云账号访问密钥ID（Access Key ID）。请在华为云控制台"我的凭证 \> 访问密钥"页面上创建和查看您的 AK/SK。更多信息请查看[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。                                                                                                                                                                                                       |
   | sk                     | 您的华为云账号秘密访问密钥（Secret Access Key）。                                                                                                                                                                                                                                                                                                                       |
   | IoTDARegion.CN_NORTH_4 | 请替换为您要访问的物联网平台的区域，当前物联网平台可以访问的区域，在SDK代码[IoTDARegion.cs](https://github.com/huaweicloud/huaweicloud-sdk-net-v3/tree/master/Services/IoTDA/V5/Region/IoTDARegion.cs)中已经定义。 您可以在控制台上查看当前服务所在区域名称，区域名称、区域和终端节点的对应关系，具体步骤请参考[地区和终端节点](https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#section0)。 |
      
   
   
 
#### 更多
项目源码及更多详细的使用指导请参考[华为云 .Net 软件开发工具包（.NET SDK）](https://github.com/huaweicloud/huaweicloud-sdk-net-v3/blob/master/README_CN.md)。
推荐您使用API在线调试工具[API Explorer](https://console.huaweicloud.com/apiexplorer/#/apidoc/IoTDA) ，API Explorer 支持快速调试和检索，调试API的同时，可以根据您的参数实时生成各种开发语言的SDK示例代码，方便您直接根据示例代码使用SDK。
