2015-02-03 17 views
8

Tôi đang cố gắng thực hiện yêu cầu ajax GET đối với dịch vụ API RESTful Office365 từ máy chủ cục bộ của tôi, nhưng đang chạy vào các lỗi HTTPRequest nhiều miền. Sau đây là một mẫu của tôi 'get-file-at-root' nỗ lực:ajax nhận được yêu cầu tới Office365 REST Api thất bại CORS?

$.ajax({ 
    url: 'https://[sharepoint_site]/_api/v1.0/me/files?access_token='+token, 
    type: 'get', 
    dataType: 'json', 
    success: function(data) { 
    if (success){ 
     success(data); 
    } 
    }, 
    error: error 
}) 

tôi nhận được câu trả lời sau đây từ máy chủ:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 403. 

Tôi đã thử gửi truy cập mã thông báo làm thông số tiêu đề:

headers: {'Authorization': 'Bearer '+ token} 

nhưng điều này có cùng kết quả.

Bất kỳ ý tưởng nào về những gì tôi đang làm sai?

(Bối cảnh: Tôi đang cố gắng để tạo ra riêng Office365 'chọn tệp' của tôi trên máy khách vì tôi không thể tìm thấy một thư viện có sẵn cho doanh nghiệp onedrive rằng nguồn cung cấp này.)

+0

Bạn có chắc là API REST chia sẻ hỗ trợ CORS không? – MrPiao

+0

Họ làm ngay bây giờ! Xem bên dưới ... –

Trả lời

4

API tệp Office 365 và SharePoint REST vừa giới thiệu hỗ trợ cho CORS.

https://msdn.microsoft.com/en-us/office/office365/howto/create-web-apps-using-CORS-to-access-files-in-Office-365

Điều bạn đang cố gắng làm là chính xác cách hoạt động. Dịch vụ sẽ phản hồi yêu cầu trước chuyến bay OPTIONS với tiêu đề Access-Control-Allow-Origin.

Uỷ quyền trong yêu cầu phải là mã thông báo truy cập tài khoản ngầm OAuth2 do Azure Active Directory cấp.

+1

Hoạt động như một sự quyến rũ! Cảm ơn! –

-2

Bạn có thể thử với thiết lập Access-Control-Allow-Origin trong tiêu đề như hình dưới đây.

headers: { 'Access-Control-Allow-Origin': '*' } 
+2

Tiêu đề này phải được gửi như một phần của phản hồi chứ không phải yêu cầu. –

0
response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setCharacterEncoding("UTF-8"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, GET"); 
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
0

Bạn không có ý tưởng về CORS. Đọc thông số kỹ thuật: http://www.w3.org/TR/cors/

Trong trường hợp của bạn, bạn phải cho phép xuất xứ null, vì chúng ta đang nói về máy chủ cục bộ. Bạn phải cho phép các phương thức và tiêu đề bạn gửi, ngay cả tiêu đề content-type. Bạn phải cho phép gửi thông tin đăng nhập mà bạn có thể nhận được trong tiêu đề Authorization. Bạn phải xử lý các yêu cầu OPTIONS với 200 ok.

Các vấn đề liên quan