SharePoint 2013托管APP。跨域问题

时间:2013-07-30 17:30:51

标签: sharepoint-2013

我正在开发SharePoint托管应用。在此应用程序中,我希望将数据(多个文件流作为多部分表单数据)“发布”到跨域第三方Rest服务,该服务需要用户名和密码才能传递此POST请求。我发现许多样本可以使用“GET”操作访问跨域REST服务,没有用户名和密码。这些示例使用GET操作正常工作,没有用户名和密码,但不支持我想发送用户名和密码以及多部分表单数据的情况。

我已经看过fiddler会话,我发送了Authorization标头值,这是用户名和密码的哈希值。但是这项工作无法成功将用户名和密码传递给其他服务。此外,我需要找到一种方法将多部分表单数据发送到REST服务。

以下是在msdn论坛上提出的问题, http://social.technet.microsoft.com/Forums/sharepoint/en-US/d4302523-82cc-4732-a89b-05eb0bbafadf/sharepoint-2013-hosted-app-cross-domain-issue

1 个答案:

答案 0 :(得分:0)

我不知道您的问题是否已经解决,但以下是在列表示例中添加,删除和更新项目,以便对共享点列表进行跨域调用。

function addItem() {
var executor = new SP.RequestExecutor(appweburl);

var dataTobeSent = {
    __metadata: { "type": "SP.Data.TestListforAppListItem" },
    Title: $("#col1").val(),
    testCol1: $("#col2").val(),
    test_x0020_col_x0020_2: $("#col3").val()
};

var sendData = JSON.stringify(dataTobeSent);

executor.executeAsync(
    {
        url:
            appweburl +
            "/_api/SP.AppContextSite(@target)/web/lists/getByTitle('testListforApp')/items?@target='" +
            hostweburl + "'",
        contentType: "application/json;odata=verbose",
        method: "POST",
        body: sendData,
        headers: {
            "Accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: getAllListItems,
        error: errorHandler
    }
);
}

function deleteItem(id) {
var executor = new SP.RequestExecutor(appweburl);
executor.executeAsync(
    {
        url:
            appweburl +
            "/_api/SP.AppContextSite(@target)/web/lists/getByTitle('testListforApp')/items(" + id + ")?@target='" +
            hostweburl + "'",
        contentType: "application/json;odata=verbose",
        method: "POST",
        headers: {
            "Accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-Http-Method": "DELETE",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "If-Match": "*"
        },
        success: getAllListItems,
        error: errorHandler
    }
);
}

function updateItem(id) {
var executor = new SP.RequestExecutor(appweburl);

var dataTobeSent = {
    __metadata: { "type": "SP.Data.TestListforAppListItem" },
    Title: $("#col1").val(),
    testCol1: $("#col2").val(),
    test_x0020_col_x0020_2: $("#col3").val()
};

var sendData = JSON.stringify(dataTobeSent);

executor.executeAsync(
    {
        url:
            appweburl +
            "/_api/SP.AppContextSite(@target)/web/lists/getByTitle('testListforApp')/items(" + id + ")?@target='" +
            hostweburl + "'",
        contentType: "application/json;odata=verbose",
        method: "POST",
        body: sendData,
        headers: {
            "Accept": "application/json;odata=verbose",
            "content-type": "application/json;odata=verbose",
            "X-HTTP-Method": "MERGE",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "If-Match": "*"
        },
        success: getAllListItems,
        error: errorHandler
    }
);
}

希望这有帮助。