0

SharePoint 2010サイトページにアクセスして、そのページをローカルドライブに「.htm」形式で保存するWindowsアプリケーションを作成する必要があります。

ただし、そのSharePointサイトにはクレームベースの認証があります。

そのサイトにアクセスするには、「ドメイン名」とともに「ユーザー名」と「パスワード」を提供する必要があります。

そのため、Windowsアプリケーションを介してサイトのクレデンシャルを渡してそのサイトにアクセスするにはどうすればよいですか?

次のコードを使用しましたが、「リモートサーバーがエラーを返しました:(403)Forbidden」という例外がスローされます。

WebRequest Request1;
HttpWebResponse Response1;

Request1 = WebRequest.Create(txtUrl.Text.ToString());
Request1.Credentials = new NetworkCredential(strUserNm.ToString(), strPassword.ToString(), StrDomain.ToString());

Request1.PreAuthenticate = true;
Response1 = (HttpWebResponse)Request1.GetResponse();

どんな助けでもかなりのものになるでしょう...

4

2 に答える 2

1

デュアル認証モードのウォームアップ タイマー ジョブに基づいて、次のように変更しました。

WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.Timeout = System.Threading.Timeout.Infinite;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
WebResponse response = request.GetResponse();

これに:

HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.Timeout = System.Threading.Timeout.Infinite;
request.Credentials = new CredentialCache
{
    { new Uri(url), "NTLM", new NetworkCredential(username, password, domain) }
};
request.Headers.Add("Authorization", GetAuthorization(username, password, domain));
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 GTB7.1 ( .NET CLR 3.5.30729)";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.CookieContainer = new CookieContainer();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;

GetAuthorization メソッドは次のようになります。

private function GetAuthorization(string username, string password, string domain) 
{
    string credentials = string.Format(@"{0}\{1}:{2}", domain, username, password);
    byte[] bytes = Encoding.ASCII.GetBytes(credentials);
    string base64 = Convert.ToBase64String(bytes);
    return = string.Concat("NTLM ", base64);
}

更新されたコードにより、従来の Web アプリケーションとクレーム ベースの Web アプリケーションの両方でファイルにアクセスできるようになりました。

于 2014-01-15T20:32:22.147 に答える
0

ドメインがどのようにキャプチャされているかに注意してください..

//このコンストラクターのユーザー名パラメーターに domain\username または username@domain を使用しないでください。これは機能しません (設計上)。ドメインを取るコンストラクターには 3 つの引数があります。または、上記のサンプル コードで明確に説明されているように、ドメイン プロパティを使用します。

// Call the onstructor  to create an instance of NetworkCredential with the 
// specified user name and password.

NetworkCredential myCredentials = new NetworkCredential(username,passwd);

// Create a WebRequest with the specified URL. 
WebRequest myWebRequest = WebRequest.Create(url);
myCredentials.Domain = domain;
myWebRequest.Credentials = myCredentials;
Console.WriteLine("\n\nCredentials Domain : {0} , UserName : {1} , Password : {2}",
myCredentials.Domain, myCredentials.UserName, myCredentials.Password);
Console.WriteLine("\n\nRequest to Url is sent.Waiting for response...");


// Send the request and wait for a response.
WebResponse myWebResponse = myWebRequest.GetResponse(); 

// Process the response.
Console.WriteLine("\nResponse received successfully.");
// Release the resources of the response object.
myWebResponse.Close();
于 2012-08-03T18:26:41.017 に答える