Получение ответа 403 при попытке доступа к файлу в списке SharePoint через WebClient - PullRequest
1 голос
/ 15 января 2011

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 15 января 2011

Возможно, вам придется выполнить вход в систему утверждений с помощью 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 голосов
/ 15 января 2011

Вам больше повезет, если вы используете SharePoint OM с WIF.Пример доступен здесь: http://www.shailen.sukul.org/2010/07/adfs-20-and-sharepoint-client-om.html

...