开发者社区 问答 正文

.NET-SDK之如何实现跨域资源共享?

跨域资源共享(CORS)允许web端的应用程序访问不属于本域的资源。OSS提供接口方便开发者控制跨域访问的权限。

设定CORS规则


通过setBucketCors 方法将指定的存储空间上设定一个跨域资源共享CORS的规则,如果原规则存在则覆盖原规则。具体的规则主要通过CORSRule类来进行参数设置。代码如下:

  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. var req = new SetBucketCorsRequest(bucketName);
  5. var r1 = new CORSRule();
  6. //指定允许跨域请求的来源
  7. r1.AddAllowedOrigin("http://www.a.com");
  8. //指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)
  9. r1.AddAllowedMethod("POST");
  10. //控制在OPTIONS预取指令中Access-Control-Request-Headers头中指定的header是否允许。
  11. r1.AddAllowedHeader("*");
  12. //指定允许用户从应用程序中访问的响应头
  13. r1.AddExposeHeader("x-oss-test");
  14. req.AddCORSRule(r1);
  15. client.SetBucketCors(req);

提示:
注意:
  • 每个存储空间最多只能使用10条规则。
  • AllowedOrigins和AllowedMethods都能够最多支持一个”*”通配符。”*”表示对于所有的域来源或者操作都满足。
  • 而AllowedHeaders和ExposeHeaders不支持通配符。


获取CORS规则


我们可以参考存储空间的CORS规则,通过GetBucketCors方法。代码如下:
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. var rules = client.GetBucketCors(bucketName);
  5. foreach (var rule in rules)
  6. {
  7.     Console.WriteLine("AllowedOrigins:{0}", rule.AllowedOrigins);
  8.     Console.WriteLine("AllowedMethods:{0}", rule.AllowedMethods);
  9.     Console.WriteLine("AllowedHeaders:{0}", rule.AllowedHeaders);
  10.     Console.WriteLine("ExposeHeaders:{0}", rule.ExposeHeaders);
  11.     Console.WriteLine("MaxAgeSeconds:{0}", rule.MaxAgeSeconds);
  12. }

提示:


删除CORS规则


用于关闭指定存储空间对应的CORS并清空所有规则。
  1. using Aliyun.OSS;
  2. // 初始化OssClient
  3. var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
  4. // 清空存储空间的CORS规则
  5. client.DeleteBucketCors(bucketName);

提示:


展开
收起
青衫无名 2017-10-18 16:47:19 1813 分享 版权
阿里云 AI 助理回答

阿里云对象存储服务(OSS)允许用户通过简单的API调用来管理跨域资源共享(CORS)规则,从而控制不同源之间的资源访问权限。您提供的代码示例分别展示了如何在OSS中设定、获取和删除CORS规则,下面是对这些操作的简要说明:

设定CORS规则

使用SetBucketCorsRequestCORSRule类来定义允许的来源、HTTP方法、请求头等。例如,以下代码片段展示了如何设置一个CORS规则,允许来自http://www.a.com的POST请求,并且允许所有响应头中的x-oss-test被客户端访问。

var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var req = new SetBucketCorsRequest(bucketName);
var r1 = new CORSRule();
r1.AddAllowedOrigin("http://www.a.com");
r1.AddAllowedMethod("POST");
r1.AddAllowedHeader("*");
r1.AddExposeHeader("x-oss-test");
req.AddCORSRule(r1);
client.SetBucketCors(req);

获取CORS规则

通过调用GetBucketCors方法,可以获取指定存储空间当前设置的所有CORS规则,并遍历打印出每个规则的详细信息,如允许的来源、方法、头信息等。

var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
var rules = client.GetBucketCors(bucketName);
foreach (var rule in rules)
{
    Console.WriteLine("AllowedOrigins:{0}", rule.AllowedOrigins);
    Console.WriteLine("AllowedMethods:{0}", rule.AllowedMethods);
    Console.WriteLine("AllowedHeaders:{0}", rule.AllowedHeaders);
    Console.WriteLine("ExposeHeaders:{0}", rule.ExposeHeaders);
    Console.WriteLine("MaxAgeSeconds:{0}", rule.MaxAgeSeconds);
}

删除CORS规则

如果需要关闭某个存储空间的CORS功能并清空所有已设置的规则,可以调用DeleteBucketCors方法。

var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
client.DeleteBucketCors(bucketName);

请注意,每次设置CORS规则时,如果该存储空间已有规则,则会覆盖原有规则;并且每个存储空间最多只能配置10条CORS规则。此外,关于AllowedHeadersExposeHeaders不支持通配符的限制也需留意。

以上就是使用阿里云OSS进行CORS规则管理的基本操作,确保在实际应用中正确配置以满足跨域访问的需求。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答