本文介绍如何进行跨域资源共享。
跨域资源共享(Cross-origin resource sharing,简称CORS)允许Web端的应用程序访问不属于本域的资源。OSS提供跨域资源共享接口,方便您控制跨域访问的权限。
更多关于跨域资源共享的介绍,请参见开发指南中的设置跨域访问和API参考中PutBucketcors。
跨域资源共享的完整代码请参见GitHub。
设置跨域资源共享规则
设置跨域资源共享规则的完整代码请参见GitHub。
以下代码用于设置指定存储空间的跨域资源共享规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | using Aliyun.OSS; using Aliyun.OSS.Common; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; // 创建OSSClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { var request = new SetBucketCorsRequest(bucketName); var rule1 = new CORSRule(); // 指定允许跨域请求的来源。 // 指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)。 rule1.AddAllowedMethod( "POST" ); // AllowedHeaders和ExposeHeaders不支持通配符。 rule1.AddAllowedHeader( "*" ); // 指定允许用户从应用程序中访问的响应头。 rule1.AddExposeHeader( "x-oss-test" ); // 最多允许10条规则。 request.AddCORSRule(rule1); var rule2 = new CORSRule(); // AllowedOrigins和AllowedMethods最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作。 rule2.AddAllowedMethod( "GET" ); // 是否允许预取指令(OPTIONS)中Access-Control-Request-Headers头中指定的Header。 rule2.AddExposeHeader( "x-oss-test2" ); // 指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。 rule2.MaxAgeSeconds = 100 ; request.AddCORSRule(rule2); // 设置跨域资源共享规则。 client.SetBucketCors(request); Console.WriteLine( "Set bucket:{0} Cors succeeded " , bucketName); } catch (OssException ex) { Console.WriteLine( "Failed with error info: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}" , ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine( "Failed with error info: {0}" , ex.Message); } |
获取跨域资源共享规则
获取跨域资源共享规则完整代码请参见GitHub。
以下代码用于获取跨域资源共享规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | using Aliyun.OSS; using Aliyun.OSS.Common; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; // 创建OSSClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { // 获取跨域资源共享规则。 var result = client.GetBucketCors(bucketName); Console.WriteLine( "Get bucket:{0} Cors succeeded " , bucketName); foreach (var rule in result) { foreach (var origin in rule.AllowedOrigins) { Console.WriteLine( "Allowed origin:{0}" , origin); } } } catch (OssException ex) { Console.WriteLine( "Failed with error info: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}" , ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine( "Failed with error info: {0}" , ex.Message); } |
删除跨域资源共享规则
删除跨域资源共享规则的完整代码请参见GitHub。
以下代码用于删除指定存储空间的所有跨域资源共享规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using Aliyun.OSS; using Aliyun.OSS.Common; var endpoint = "<yourEndpoint>" ; var accessKeyId = "<yourAccessKeyId>" ; var accessKeySecret = "<yourAccessKeySecret>" ; var bucketName = "<yourBucketName>" ; // 创建OSSClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { // 删除跨域资源共享规则。 client.DeleteBucketCors(bucketName); Console.WriteLine( "Delete bucket:{0} Cors succeeded " , bucketName); } catch (OssException ex) { Console.WriteLine( "Failed with error info: {0} ; Error info: {1}. \nRequestID:{2}\tHostID:{3}" , ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine( "Failed with error info: {0}" , ex.Message); } |