1

System.Net.WebClient를 사용하여 SharePoint 목록의 파일에 액세스하려고합니다. 이 목록에는 익명 액세스가 비활성화되어 있습니다 (켜면 작동 함). 클레임 기반 인증을 사용하고 있습니다. SharePoint 목록에서 파일에 액세스하는 다른 방법이 있지만 Office Web Apps 웹 서비스에 대한 호출과 관련하여 이미지의 생성을 원하는 파일의 URL을 전달해야한다는 것을 알고 있습니다. . OWA 웹 서비스를이 URL로 호출하고 WebClient를 통해 직접 파일을 다운로드하려고하는 경우에도 같은 오류가 발생합니다.WebClient를 통해 SharePoint 목록의 파일에 액세스하려고 할 때 403 응답 받기

오류는 403 금지되어 있습니다. 그 원인은 클레임 기반 인증 사용과 관련이 있다고 생각합니다. 나는 많은 제안 된 치료법을 시도했지만 지금까지 아무 것도 효과가 없습니다. 브라우저를 사용하여 파일 및 웹 서비스에 액세스 할 수 있으며 인증 요청을받은 후에 작동합니다. 의도적으로 인증 시도에 실패하면 401 오류 (403이 아님)가 표시되므로 자격 증명에 문제가 있다고 생각하지 않습니다 (지금까지 하드 코드를 작성한 것으로 보았습니다). RunWithElevated Privileges로 코드를 실행 해 보았지만 도움이되지 않습니다. 어떤 도움에 감사드립니다

 
    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를 실행하는 것입니다. 파일을 처리 한 후 보호되지 않은 목록에서 파일을 지 웁니다. –

관련 문제