1

MVC3 アプリにリクエストを送信しようとしています。通常の WebRequest を試しました。RestSharp で正しいオーセンティケーターを適用して試していますが、それでもログイン ページのリダイレクト結果が返されますか?

私は何を間違っていますか?

upd:RestSharp でフォーム認証を行うにはどうすればよいですか? 何とか可能だと思います-そのクッキーをいじる必要があるだけです...

4

2 に答える 2

1

ログイン ページにリダイレクトされる場合は、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 を配置できることです。

于 2012-10-23T20:12:31.153 に答える
0

フォーム認証に合格するには、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];
    }
于 2012-10-24T17:17:39.707 に答える