Cors使用sharepoint发布问题

时间:2017-02-22 13:32:34

标签: asp.net .net asp.net-web-api sharepoint cors

我正在尝试使用REST API(sharepoint)进行查询并获得一些结果。

这是我开始的地方

https://www.slideshare.net/CoreyRoth/fives-ways-to-query-share-point-2013-search-sharepoint-summit-toronto-2013,幻灯片31

这就是我所拥有的

document.getElementById("restApi")
            .addEventListener("click", restApi, false);
    function restApi() {

        var queryUrl = "https://myAppDomain.org/_api/search/query?querytext='" + $("#restSearch").val() + "'";

        $.ajax({
            type: "GET",
            url: queryUrl,
            xhrFields: {
                withCredentials: true
            },
            headers: {
                "Accept": "application/json; odata=verbose"
            },
            success: function (data) {
                var results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;
            },
            error: function (error) {
            }
        });
    }

这就是问题所在。

  

XMLHttpRequest无法加载“https://myAppDomain.org/_api/search/query?querytext=x”请求中没有“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:63734”   访问。

以及我尝试提供密码和用户名的另一种方式

headers: {
                "Accept": "application/json; odata=verbose",
                "password": "my password",
                "username": "my account name"
            },

我得到了

  

XMLHttpRequest无法加载   https://myAppDomain.org/_api/search/query?querytext=x。回应   预检请求未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此不允许来源“http://localhost:63734”   访问。响应的HTTP状态代码为401。

我正在使用.net webApi,我已经安装了cors包,配置

 // Enabled cors
config.EnableCors(new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true });

该应用是内部的,我正在使用Windows凭据传递和帐户名称。

那么为什么我得到这个错误,我做错了什么?,我搜索并尝试了其他解决方案,但总是得到与

相关的相同问题
  

请求的

上没有'Access-Control-Allow-Origin'标题

3 个答案:

答案 0 :(得分:3)

  1. 打开IIS
  2. 转到Google协作平台并找到您的Sharepoint网站
  3. 右键单击 - >探索
  4. 打开web.config
  5. 在system.webServer节点

    中添加以下代码
    <?xml version="1.0" encoding="utf-8"?>
        <configuration>
            <system.webServer>
                <httpProtocol>
                   <customHeaders>
                     <add name="Access-Control-Allow-Origin" value="*" />
                   </customHeaders>
                </httpProtocol>
            </system.webServer>
       </configuration>
    
  6. 保存并退出

答案 1 :(得分:1)

我设法解决了我的问题(部分原因,因为我本来想在客户端使用CSOM而不是REST API)允许从我的应用程序直接调用应用程序(sharepoint app)的跨域调用提出要求。

因此,在请求的应用程序中,我添加了以下文件:

  

web.config

部分:

  

system.webserver / httpprotocol / customheaders

内容:

<add name="Access-Control-Allow-Origin" value="https://myApplicationDomain.zzz" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Credentials" value="true" /> 

答案 2 :(得分:0)

如果您正在开发服务器

你有没有把#34; Access-Control-Allow-Origin:localhost&#34;在您的.htaccess或您的网络服务器配置中?

您也可以在服务器的响应中添加该标头。