首页 文章

使用Angular的Sharepoint API CORS访问

提问于
浏览
0

我会从SharePoint API获取数据 .

当我攻击API时,我收到CORS访问错误 .

这是我的服务 .

public getResults() {
    let url;
    let mockUrl;
    var headers = new HttpHeaders({
      "Content-Type": "application/json",
      "Access-Control-Allow-Credentials": "true",
      "Access-Control-Allow-Origin": "*"
    });

    url ="https://my.sharepoint.api";
    return this.httpClient
    .get(url, headers)      
 }

负责这个项目的团队告诉我他们正在使用其他角度应用程序,他们不需要更改他们的服务器配置(允许localhost调用)

这是我得到的回应:

GET https://my.api.sharepoint 401(未授权)无法加载https://my.api.sharepoint:请求的资源上没有“Access-Control-Allow-Origin”标头 . 因此不允许来源'http:// localhost:4200'访问 . 响应具有HTTP状态代码401 .

我怎么解决这个问题?

2 回答

  • 0

    我有同样的问题,我通过安装你可以在链接中找到的插件解决了客户端(如果你有铬) . 这是一个只有在你做一些测试时才有用的选项 .

    https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=it&gl=IT

  • 0

    您需要为SharePoint 2013启用跨域调用(这不适用于SharePoint 2016) .

    并将http://localhost:31699添加到信任站点,以便请求将使用当前用户凭据进行身份验证 .

    Add-PSSnapin Microsoft.SharePoint.PowerShell -EA 0
    
    $localFarm = Get-SPFarm
    
    $webapp = Get-SPWebApplication "http://sp:12001"
    
    # Remove old web.config modifications of MyAuthenticationProvider
    $oldMods = @();
    $webapp.WebConfigModifications | ? { $_.Owner -eq "CrossSiteScripting" } | % { 
        $oldMods = $oldMods + $_
    }
    
    $oldMods | % { 
        $webapp.WebConfigModifications.Remove($_) 
    }
    
    # update the Web Application and apply all existing web.config modifications - this executes the "remove" actions from above
    $webapp.Update()
    [Microsoft.SharePoint.Administration.SPWebService]::ContentService.ApplyWebConfigModifications()
    
    #Wait until web.config modifications finished by timer job
    while( (Get-SPTimerJob | ? { $_.Name -eq "job-webconfig-modification"}) -ne $null ) {
        Write-Host "." -NoNewline
        Start-Sleep 1
    }
    
    # New web.config modifications for MyAuthenticationProvider
    $myModification1 = new-object Microsoft.SharePoint.Administration.SPWebConfigModification
    $myModification1.Path = "configuration/system.webServer/httpProtocol/customHeaders"
    $myModification1.Name = "add[@name='Access-Control-Allow-Origin'][@value='http://localhost:31699']"
    $myModification1.Sequence = 0
    $myModification1.Owner = "CrossSiteScripting"
    #0 = for the enum value "SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode"
    $myModification1.Type = 0
    $myModification1.Value = "<add name='Access-Control-Allow-Origin' value='http://localhost:31699' />"
    $webapp.WebConfigModifications.Add($myModification1)
    
    $myModification1 = new-object Microsoft.SharePoint.Administration.SPWebConfigModification
    $myModification1.Path = "configuration/system.webServer/httpProtocol/customHeaders"
    $myModification1.Name = "add[@name='Access-Control-Request-Method'][@value='GET,POST,HEAD,OPTIONS']"
    $myModification1.Sequence = 0
    $myModification1.Owner = "CrossSiteScripting"
    $myModification1.Type = 0
    $myModification1.Value = "<add name='Access-Control-Request-Method' value='GET,POST,HEAD,OPTIONS' />"
    $webapp.WebConfigModifications.Add($myModification1)
    
    $myModification1 = new-object Microsoft.SharePoint.Administration.SPWebConfigModification
    $myModification1.Path = "configuration/system.webServer/httpProtocol/customHeaders"
    $myModification1.Name = "add[@name='Access-Control-Request-Headers'][@value='Content-Type,Authorization']"
    $myModification1.Sequence = 0
    $myModification1.Owner = "CrossSiteScripting"
    $myModification1.Type = 0
    $myModification1.Value = "<add name='Access-Control-Request-Headers' value='Content-Type,Authorization' />"
    $webapp.WebConfigModifications.Add($myModification1)
    
    $myModification1 = new-object Microsoft.SharePoint.Administration.SPWebConfigModification
    $myModification1.Path = "configuration/system.webServer/httpProtocol/customHeaders"
    $myModification1.Name = "add[@name='Access-Control-Allow-Credentials'][@value='true']"
    $myModification1.Sequence = 0
    $myModification1.Owner = "CrossSiteScripting"
    $myModification1.Type = 0
    $myModification1.Value = "<add name='Access-Control-Allow-Credentials' value='true' />"
    $webapp.WebConfigModifications.Add($myModification1)
    
    $webapp.Update()
    [Microsoft.SharePoint.Administration.SPWebService]::ContentService.ApplyWebConfigModifications()
    
    #Wait until web.config modifications finished by timer job
    while( (Get-SPTimerJob | ? { $_.Name -eq "job-webconfig-modification"}) -ne $null ) {
        Write-Host "." -NoNewline
        Start-Sleep 1
    }
    

相关问题