1

Я пытаюсь получить доступ к файлу в списке SharePoint с помощью System.Net.WebClient. В списке отключен анонимный доступ (когда мы его включаем, он работает), и мы используем аутентификацию на основе требований. Я знаю, что есть другие способы доступа к файлу в списке SharePoint, однако это касается вызова, который я делаю в веб-службе Office Web Apps, где мне нужно передать URL-адрес файла, который я хочу, чтобы он генерировал изображение , Оба вызова веб-службы OWA с этим URL-адресом и попытки загрузить файл напрямую через WebClient дают ту же ошибку.Получение ответа 403 при попытке доступа к файлу в списке SharePoint через WebClient

Ошибка 403 запрещена, что после некоторых поисковых запросов я считаю, что причина как-то связана с использованием аутентификации на основе утверждений. Я пробовал ряд предлагаемых средств, но пока ничего не получилось. Я могу получить доступ к файлу и веб-службе с помощью браузера, и он работает после того, как я получаю запрос проверки подлинности. Если я ошибочно откажусь от проверки подлинности, я получаю ошибку 401 (а не 403), поэтому я не верю, что что-то не так с учетными данными (я дошел до их жесткого кода). Я попытался запустить код с привилегиями RunWithElevated, но это не помогает.

Вот некоторые примеры кода:

 
    using (var webClient = new WebClient()) 
    { 
    webClient.UseDefaultCredentials = true; 
    byte[] result = webClient.DownloadData(urlOfFileInList); 
    } 

Любая помощь приветствуется!

+0

У меня такая же проблема, вы ее решаете? – nixjojo

ответ

1

Возможно, вам понадобится войти в систему с помощью WebClient, посмотрите, можете ли вы использовать это как отправную точку.

using (var webClient = new WebClient()) { 
     string url = "http://yoursite"; 
     string result = null; 
     try { 
      result = webClient.DownloadString(url); 
     } catch (Exception ex) { 
      if (ex.ToString().Contains("403")) { 
       result = webClient.DownloadString(url + "/_forms/default.aspx"); 
       string viewstate = result.Substring(result.IndexOf("__VIEWSTATE") + 11); 
       viewstate = viewstate.Substring(viewstate.IndexOf("value=\"") + 7); 
       viewstate = viewstate.Substring(0, viewstate.IndexOf("\"")); 
       string eventvalidation = result.Substring(result.IndexOf("__EVENTVALIDATION") + 17); 
       eventvalidation = eventvalidation.Substring(eventvalidation.IndexOf("value=\"") + 7); 
       eventvalidation = eventvalidation.Substring(0, eventvalidation.IndexOf("\"")); 
       System.Collections.Specialized.NameValueCollection values = new System.Collections.Specialized.NameValueCollection(); 
       values.Add("__EVENTARGUMENT", ""); 
       values.Add("__EVENTTARGET", ""); 
       values.Add("__EVENTVALIDATION", eventvalidation); 
       values.Add("__LASTFOCUS", viewstate); 
       values.Add("__VIEWSTATE", ""); 
       values.Add("ctl00$PlaceHolderMain$signInControl$UserName", ""); 
       values.Add("ctl00$PlaceHolderMain$signInControl$login", "Sign In"); 
       values.Add("ctl00$PlaceHolderMain$signInControl$password", ""); 
       //byte[] data = webClient.UploadValues(url + "/_forms/default.aspx", "POST", values); 
       //result = System.Text.Encoding.Default.GetString(data); 
       //result = webClient.UploadString(url + "/_forms/default.aspx?__EVENTARGUMENT=&__EVENTTARGET=&__EVENTVALIDATION=" + 
       // eventvalidation + "&__LASTFOCUS=&__VIEWSTATE=" + viewstate + 
       // "&ctl00$PlaceHolderMain$signInControl$UserName=&ctl00$PlaceHolderMain$signInControl$login=Sign+In&ctl00$PlaceHolderMain$signInControl$password=", ""); 
       string location = webClient.ResponseHeaders["Location"]; 
       result = webClient.DownloadString(url); 
      } 
     } 
    } 
+0

Моим решением было получить содержимое файла с помощью SPFile, затем добавить файл в новый незащищенный список, а затем запустить Office Web Apps на новой копии. После обработки файлов я удаляю их из незащищенного списка. –

Смежные вопросы