更新时间:2025-02-19 GMT+08:00
        
          
          
        
      
      
      
      
      
      
      
      
  
      
      
      
        
C#
操作场景
使用C#语言调用APP认证的API时,您需要先获取SDK,然后打开SDK包中的工程文件,最后参考API调用示例调用API。
前提条件
- 已获取API的调用信息,具体参见认证前准备。
 - 已安装Visual Studio 2019 version 16.8.4或以上版本,如果未安装,请至Visual Studio官方网站下载。
 
获取SDK
请在API网关控制台选择“帮助中心”,在“SDK使用指引”页签中下载对应语言所使用SDK。
获取“ApiGateway-csharp-sdk.zip”压缩包,解压后目录结构如下:
| 
        名称  | 
      
        说明  | 
     
|---|---|
| 
        apigateway-signature\Signer.cs  | 
      
        SDK代码  | 
     
| 
        apigateway-signature\HttpEncoder.cs  | 
     |
| 
        sdk-request\Program.cs  | 
      
        签名请求示例代码  | 
     
| 
        backend-signature\  | 
      
        后端签名示例工程  | 
     
| 
        csharp.sln  | 
      
        工程文件  | 
     
| 
        licenses\license-referencesource  | 
      
        第三方库license文件  | 
     
打开工程
双击SDK包中的“csharp.sln”文件,打开工程。工程中包含如下3个项目:
- apigateway-signature:实现签名算法的共享库,可用于.Net Framework与.Net Core项目。
 - backend-signature:后端服务签名示例。
 - sdk-request:签名算法的调用示例,请根据实际情况修改参数后使用。具体代码说明请参考调用API示例。
 
调用API示例
- 在工程中引入sdk。
    
    
1 2 3 4 5 6
using System; using System.Net; using System.IO; using System.Net.Http; using System.Threading; using APIGATEWAY_SDK;
 - 生成一个新的Signer, 填入AppKey和AppSecret。
    
    
- 本示例以AK和SK保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量CLOUD_SDK_AK和CLOUD_SDK_SK。以Linux系统为例在本地将已获取的AK/SK设置为环境变量。
 - 生成一个新的Signer,填入已设置的环境变量。
      
1 2 3
Signer signer = new Signer(); signer.Key = Environment.GetEnvironmentVariable("CLOUD_SDK_AK"); signer.Secret = Environment.GetEnvironmentVariable("CLOUD_SDK_SK");
 
 - 生成一个HttpRequest对象,指定域方法名、请求url和body。
    
    
1 2 3
HttpRequest r = new HttpRequest("POST", new Uri("https://c967a237-cd6c-470e-906f-a8655461897e.apigw.exampleRegion.com/app1?query=value")); r.body = "{\"a\":1}";
 - 给请求添加x-stage头,内容为环境名。如有需要,添加需要签名的其他头域。
    
    
1r.headers.Add("x-stage", "RELEASE");
 - 进行签名,执行此函数会生成一个新的HttpWebRequest,并在请求参数中添加用于签名的X-Sdk-Date头和Authorization头。
    
    
1HttpWebRequest req = signer.Sign(r);
 - 访问API,查看访问结果。
    
    
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
try { var writer = new StreamWriter(req.GetRequestStream()); writer.Write(r.body); writer.Flush(); HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); var reader = new StreamReader(resp.GetResponseStream()); Console.WriteLine(reader.ReadToEnd()); } catch (WebException e) { HttpWebResponse resp = (HttpWebResponse)e.Response; if (resp != null) { Console.WriteLine((int)resp.StatusCode + " " + resp.StatusDescription); var reader = new StreamReader(resp.GetResponseStream()); Console.WriteLine(reader.ReadToEnd()); } else { Console.WriteLine(e.Message); } } Console.WriteLine("----------------");
 
   父主题: 使用APP认证调用API