C# SDK
此 C# SDK 适用于.NET Framework 2.0+, 基于七牛云API参考手册构建。
SDK结构
可以直接查看我们的SDK目录,即可大致了解我们 SDK 的结构。
- 最外层包含:配置文件, 鉴权和一些公共的函数。
- HTTP 目录主要包含了一些对 http 进行封装的类。
- Storage 目录对应七牛云存储产品(kodo)的相关API
- Cdn 目录主要包含了七牛CDN产品的相关API
- Qvs目前没有集成进来,
客户可在该目录下,新建Qvs
,放置Qvs产品的相关API。对应的API文档
开源
安装
您可以在这里找到所有的Release,选择您需要的版本下载,解压后将*.dll文件添加至项目引用。需要注意的是,此SDK依赖Json.NET,可以添加对应版本Newtonsoft.Json.dll引用或者使用NuGet来安装它:
Install-Package Newtonsoft.Json
包管理器(NuGet)方式安装
或者从NuGet来安装,以Visual Studio 2013/2015为例(如果您的Visual Studio没有安装NuGet,请先安装)。打开NuGet程序包管理器搜索Qiniu.Shared或者在控制台中键入以下命令:
Install-Package Qiniu
当然,您也可以直接从源码编译
git clone https://github.com/qiniu/csharp-sdk
鉴权
七牛 c# SDK 的所有的功能,都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的Access Key
和Secret Key
,这对密钥可以通过如下步骤获得:
示例
using System;
using Qiniu.Util;
using Qiniu.Http;
using System.Text;
using System.Security.Cryptography;
namespace QvsDemo.Business.Admin
{
public class QvsBiz
{
public static void Main()
{
string ak = "xxxxxxxx"; // 替换成实际的ak
string sk = "xxxxxxxxx"; // 替换成实际的sk
Mac mac = new Mac(ak, sk);
string body = "{\"data\":{ \"name\":\"test\"},\"params\":{ \"groups\":[\"ylxue_face_group_id2020\"]}}"; // 根据实际的API, 替换成实际的http body
HttpManager http = new HttpManager();
string url = "http://qvs.qiniuapi.com/v1/namespaces/xxxxxxx/streams"; // 替换成实际的url,此处以[API创建流](https://developer.qiniu.com/qvs/6734/create-flow)为例
Uri uri = new Uri(url);
string contentType = "application/json";
// 如果http body为空时(例如Get请求), contentType设为application/x-www-form-urlencoded或者为空
// 如果http body为空时(例如Get请求), contentType设为application/x-www-form-urlencoded或者为空
// 如果http body为空时(例如Get请求), contentType设为application/x-www-form-urlencoded或者为空
string token = qiniutoken(mac, uri, body, contentType, "POST"); // 最后一个参数,根据实际请求替换
HttpResult ret = http.PostJson(url, body, token);
Console.WriteLine(ret.Text);
}
public static string qiniutoken(Mac mac, Uri url, String body, String contentType, String method)
{
// input path and host and rawquery
string path = url.AbsolutePath;
string host = url.Host;
string rawquery = url.Query;
var data = new System.Text.StringBuilder();
data.AppendFormat("{0} {1}", method, path);
if (rawquery != String.Empty)
data.AppendFormat("{0}", rawquery);
data.AppendFormat("\nHost: {0}", host);
if (contentType != String.Empty)
data.AppendFormat("\nContent-Type: {0}", contentType);
data.Append("\n\n");
if (contentType != String.Empty && contentType != "application/octet-stream")
data.Append(body);
String sdata = data.ToString();
Console.WriteLine(sdata);
HMACSHA1 hmac = new HMACSHA1(Encoding.UTF8.GetBytes(mac.SecretKey));
byte[] digest = hmac.ComputeHash(Encoding.UTF8.GetBytes(sdata));
string qiniuToken = String.Format("Qiniu {0}:{1}", mac.AccessKey, Base64.UrlSafeBase64Encode(digest));
//string qiniuToken = String.Format("Qiniu {0}:{1}", mac.AccessKey, System.Convert.ToBase64String(digest).Replace("/", "+").Replace("+", "-"));
Console.WriteLine(qiniuToken);
return qiniuToken;
}
}
}
文档反馈
(如有产品使用问题,请 提交工单)