MVC3 アプリにリクエストを送信しようとしています。通常の WebRequest を試しました。RestSharp で正しいオーセンティケーターを適用して試していますが、それでもログイン ページのリダイレクト結果が返されますか?
私は何を間違っていますか?
upd:RestSharp でフォーム認証を行うにはどうすればよいですか? 何とか可能だと思います-そのクッキーをいじる必要があるだけです...
MVC3 アプリにリクエストを送信しようとしています。通常の WebRequest を試しました。RestSharp で正しいオーセンティケーターを適用して試していますが、それでもログイン ページのリダイレクト結果が返されますか?
私は何を間違っていますか?
upd:RestSharp でフォーム認証を行うにはどうすればよいですか? 何とか可能だと思います-そのクッキーをいじる必要があるだけです...
ログイン ページにリダイレクトされる場合は、mvc 3 アプリをフォーム認証用にセットアップする必要があります。フォーム認証では、リクエストと共に送信される Cookie が必要になります。RestSharp で基本オーセンティケーターを使用している場合、これは機能しません。MVC コントローラーを使用して、呼び出しようとしている REST API を提供していると思います。
1 つのオプションは、MVC 4 にアップグレードし、ASP.NET Web API を使用して REST API を開発することです。ASP.NET Web API での承認動作は、リダイレクトを行う代わりに HTTP 401 エラーを返すという点で少し異なります。また、AuthorizationAttribute をカスタマイズして、HTTP ヘッダーから基本認証と承認用の情報を引き出すことができます。
もう 1 つのオプションは、コントローラーのアクションが認証/承認を必要としない場合、メソッドに AllowAnonymousAttribute を配置できることです。
フォーム認証に合格するには、Cookieを取得し、RestSharpのCookieコンテナに貼り付ける必要があります。Cookieを取得するには、通常のWebRequestのみを使用できます。
private Cookie GetAuthCookie(string user, string pass)
{
var http = WebRequest.Create(_baseUrl+"Users/Login") as HttpWebRequest;
http.AllowAutoRedirect = false;
http.Method = "POST";
http.ContentType = "application/x-www-form-urlencoded";
http.CookieContainer = new CookieContainer();
var postData = "UserName=" + user + "&Password=" + pass + "&RememberMe=true&RememberMe=false&ReturnUrl=www.google.com";
byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(postData);
http.ContentLength = dataBytes.Length;
using (var postStream = http.GetRequestStream())
{
postStream.Write(dataBytes, 0, dataBytes.Length);
}
var httpResponse = http.GetResponse() as HttpWebResponse;
return httpResponse.Cookies[FormsAuthentication.FormsCookieName];
}