阿里雲OSS搭建移動應用直傳服務的.Net C#示例


OSS好幾個都沒有.Net示例,只有SDK

於是我就拿Java改成C#代碼;使用前先去Nuget包管理器下載Aliyun.Acs.Core還有Aliyun.Acs.Sts;

在安裝這個兩個包的時候安裝不了,可能因為是.Net Core的原因吧。

Nuget安裝方式安裝不了的,先去

https://github.com/aliyun/aliyun-openapi-net-sdk

下載這兩個項目然后生成引用到自己項目中。

安裝后復制下面的代碼即可,記得要把bucketName改成自己bucket的名字

using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Sts.Model.V20150401;
using Aliyun.Acs.Core.Http;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core;

namespace Test
{
    public class OssServer
    {
        private const string REGION_CN_HANGZHOU = "cn-hangzhou";
        private const string STS_API_VERSION = "2015-04-01";
        private const string AccessKeyID = "****你的AccessKeyID****";
        private const string AccessKeySecret = "****你的AccessKeySecret****";
        private const string RoleArn = "****你的RoleArn****";
        private const int TokenExpireTime = 3600;
        //這里是權限配置,請參考oss的文檔
        private const string PolicyFile = @"{
  ""Statement"": [
    {
      ""Action"": [
        ""oss:PutObject""
      ],
      ""Effect"": ""Allow"",
      ""Resource"": [""acs:oss:*:*:bucketName/*"", ""acs:oss:*:*:bucketName""]
    }
  ],
  ""Version"": ""1""
}"; 
            private AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn,
            String roleSessionName, String policy, ProtocolType protocolType, long durationSeconds)
        {
            try
            {
                // 創建一個 Aliyun Acs Client, 用於發起 OpenAPI 請求
                IClientProfile profile = DefaultProfile.GetProfile(REGION_CN_HANGZHOU, accessKeyId, accessKeySecret);
                DefaultAcsClient client = new DefaultAcsClient(profile);

                // 創建一個 AssumeRoleRequest 並設置請求參數
                AssumeRoleRequest request = new AssumeRoleRequest();
                //request.Version = STS_API_VERSION;
                request.Method = MethodType.POST;
                //request.Protocol = protocolType;

                request.RoleArn = roleArn;
                request.RoleSessionName = roleSessionName;
                request.Policy = policy;
                request.DurationSeconds = durationSeconds;

                // 發起請求,並得到response
                AssumeRoleResponse response = client.GetAcsResponse(request);

                return response;
            }
            catch (ClientException e)
            {
                throw e;
            }
        }

        public StsTokenModel GetToken()
        {
            // 只有 RAM用戶(子賬號)才能調用 AssumeRole 接口
            // 阿里雲主賬號的AccessKeys不能用於發起AssumeRole請求
            // 請首先在RAM控制台創建一個RAM用戶,並為這個用戶創建AccessKeys

            // RoleArn 需要在 RAM 控制台上獲取
            // RoleSessionName 是臨時Token的會話名稱,自己指定用於標識你的用戶,主要用於審計,或者用於區分Token頒發給誰
            // 但是注意RoleSessionName的長度和規則,不要有空格,只能有'-' '_' 字母和數字等字符
            // 具體規則請參考API文檔中的格式要求
           string roleSessionName = "alice-001";

            // 必須為 HTTPS
            try
            {
                AssumeRoleResponse stsResponse = assumeRole(AccessKeyID, AccessKeySecret, RoleArn, roleSessionName,
                        PolicyFile, ProtocolType.HTTPS, TokenExpireTime);

                return new StsTokenModel()
                {
                    status = 200,
                    AccessKeyId = stsResponse.Credentials.AccessKeyId,
                    AccessKeySecret = stsResponse.Credentials.AccessKeySecret,
                    Expiration = stsResponse.Credentials.Expiration,
                    Security = stsResponse.Credentials.SecurityToken
                };

            }
            catch (ClientException e)
            {
                return new StsTokenModel() { status = Convert.ToInt32(e.ErrorCode) };
            }
        }
    }
}    
GetToken()函數返回的STS憑據數據模型
    public class StsTokenModel
    {
        public int status { get; set; }

        public string AccessKeyId { get; set; }

        public string AccessKeySecret { get; set; }

        public string Security { get; set; }

        public string Expiration { get; set; }
    }
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM