Updated on 2025-02-19 GMT+08:00

C#

Scenarios

To use C# to call an API through app authentication, obtain the C# SDK, open the project file in the SDK, and then call the API by referring to the API calling example.

Prerequisites

  • You have obtained API calling information. For details, see Preparation.
  • You have installed Visual Studio 2019 version 16.8.4 or a later version. If not, download it from the official Visual Studio website and install it.

Obtaining the SDK

On the APIG console, choose Help Center > Using SDKs, and download the SDK of the desired language.

Then obtain the ApiGateway-csharp-sdk.zip package. The following table shows the files decompressed from the package.

Name

Description

apigateway-signature\Signer.cs

SDK code

apigateway-signature\HttpEncoder.cs

sdk-request\Program.cs

Sample code for signing requests

backend-signature\

Sample project for backend signing

csharp.sln

Project file

licenses\license-referencesource

Third-party license

Opening a Project

Double-click csharp.sln in the SDK package to open the project. The project contains the following:

  • apigateway-signature: Shared library that implements the signature algorithm. It can be used in the .Net Framework and .Net Core projects.
  • backend-signature: Example of a backend service signature.
  • sdk-request: Example of invoking the signature algorithm. Modify the parameters as required. For details about the sample code, see API Calling Example.

API Calling Example

  1. Import the C# SDK to your project.

    1
    2
    3
    4
    5
    6
    using System;
    using System.Net;
    using System.IO;
    using System.Net.Http;
    using System.Threading;
    using APIGATEWAY_SDK;
    

  2. Generate a new signer and enter the AppKey and AppSecret.

    1. In this example, the AK and SK stored in the environment variables are used. Specify the environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment first. The following uses Linux as an example to describe how to set the obtained AK/SK as environment variables.
      1. Open the terminal and run the following command to open the environment variable configuration file:

        vi ~/.bashrc

      2. Set environment variables, save the file, and exit the editor.
        export CLOUD_SDK_AK="Obtained AK"
        export CLOUD_SDK_SK="Obtained SK"
      3. Run the following command to apply the modification:

        source ~/.bashrc

    2. Generate a new signer and enter the configured environment variables.
      1
      2
      3
      Signer signer = new Signer();
      signer.Key = Environment.GetEnvironmentVariable("CLOUD_SDK_AK");
      signer.Secret = Environment.GetEnvironmentVariable("CLOUD_SDK_SK");
      

  3. Generate an HttpRequest, and specify the method, request URL, and 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}";
    

  4. Add the x-stage header to the request to specify an environment name. Add other headers to be signed as necessary.

    1
    r.headers.Add("x-stage", "RELEASE");
    

  5. Execute the following function to generate HttpWebRequest, and add the X-Sdk-Date and Authorization headers for signing the request:

    1
    HttpWebRequest req = signer.Sign(r);
    

  6. Access the API and view the access result.

     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("----------------");