1

System.Net.WebClientを使用してSharePointリスト内のファイルにアクセスしようとしています。リストには匿名アクセスが無効になっています(これをオンにすると動作します)。また、クレームベースの認証を使用しています。私は、SharePointリストのファイルにアクセスする他の方法があることを知っていますが、これはOffice Web Apps Webサービスに対して行う呼び出しに関するものです。ここでは、ファイルのURLを渡す必要があります。 。 OWA WebサービスをこのURLで呼び出して、WebClient経由で直接ファイルをダウンロードしようとしても、同じエラーが発生します。WebClient経由でSharePointリスト内のファイルにアクセスしようとしたときに403が返される

エラーは403禁止されています。私は原因が何らかの形でクレームベース認証の使用に関係していると信じています。私はいくつかの救済策を試しましたが、今のところ何も働いていません。ブラウザを使用してファイルとWebサービスにアクセスすることができ、認証の挑戦を得た後に動作します。意図的に認証の挑戦に失敗した場合は、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を実行することでした。ファイルを処理した後、私はそれらを保護されていないリストから削除します。 –

関連する問題