アクセスしようとしているWebページがフォーム認証を使用していると思われます。これは、保護されたリソースにアクセスできるようにする場合は、有効な認証Cookieを提供する必要があることを意味します。また、有効な認証Cookieを取得するには、まず、Cookieを発行するログオンページにPOSTリクエストを送信して自分自身を認証する必要があります。Cookieを取得すると、保護されたリソースに対する後続のリクエストでCookieを送信できるようになります。WebClient
また、箱から出してすぐにCookieをサポートしていないことにも注意してください。このため、カスタムのCookie対応Webクライアントを作成できます。
public class CookieAwareWebClient : WebClient
{
public CookieAwareWebClient()
{
CookieContainer = new CookieContainer();
}
public CookieContainer CookieContainer { get; private set; }
protected override WebRequest GetWebRequest(Uri address)
{
var request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = CookieContainer;
return request;
}
}
これで、このクライアントを使用して2つのリクエストを実行できます。
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{ "username", "john" },
{ "password", "secret" },
};
client.UploadValues("http://domain.loc/logon.aspx", values);
// If the previous call succeeded we now have a valid authentication cookie
// so we could download the protected page
string result = client.DownloadString("http://domain.loc/testpage.aspx");
}
明らかに、ASP.NETのViewStateの不安定さのために、ログオン要求に沿って他のいくつかのパラメーターを送信する必要がある場合があります。できることは次のとおりです。Webブラウザーで認証し、FireBugを使用して、送信する必要のある正確なパラメーターとヘッダーを確認します。