I have developed this code
$spSiteUrl = "http://mysharepoint/sites/site/web" $cmd = "_api/web/lists/getbytitle('$docLib')/rootfolder/files/add(url='" + $file.Name + "', overwrite=true)" $digest = "got valid digest through code"; $mediaType = new-object("System.Net.Http.Headers.MediaTypeWithQualityHeaderValue") "application/json" $handler = new-object("System.Net.Http.HttpClientHandler") $handler.UseDefaultCredentials= $true $client = New-Object("System.Net.Http.HttpClient") $handler $client.BaseAddress = $spSiteUrl $client.DefaultRequestHeaders.Accept.Clear() $client.DefaultRequestHeaders.Accept.Add($mediaType); $client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose") $content = $null $client.DefaultRequestHeaders.Add("X-HTTP-Method", "PUT") $client.DefaultRequestHeaders.Add("X-RequestDigest", $digest) $fileStream = [System.IO.File]::OpenRead($file.FullName) $streamContent = new-object ("System.Net.Http.StreamContent") $fileStream $task = $client.PostAsync($cmd, $streamContent) $response = $task.Result $content = $response.Content.ReadAsStringAsync().Result Write-Host $content $fileStream.Close() $fileStream.Dispose() $response = $response.EnsureSuccessStatusCode() $client.Dispose()
Here I have a valid digest value which I got from doing a POST on _api/contextinfo.
However when I run this code, I get an error
{"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"Access denied. You do not have permission to perform this action or access this resource."}}}
_api/web/lists/getbytitle('test')/rootfolder/files/add(url='BaselineFinishTag_2014_06.log', overwrite=true)
I am the site collection owner and also farm administrator. The code is being executed by my account and as you can see that I am using UseDefaultCredentials=true. So why does this code not work?
Edit:: Could it be my age old nemesis the "Authorization" header with Bearer and AccessToken? But this is a powershell script so ofcourse there is no TokenHelper class which will provide me an AccessToken.
val it: unit=()