0

C#MVCアプリケーションでFacebookを使用してサーバー側のログインプロセスを作成しようとしています。

アプリでステータスの更新を送信する時点で、Facebookに公開する必要があります。リダイレクトを行うのは、次のとおりです。

https://www.facebook.com/dialog/oauth?client_id={0}&scope={1}&redirect_uri={2}

この方法の使用:

Response.Redirect(...);

ここで、リダイレクトURIは次のようにエンコードされます。

HttpUtility.UrlEnconde("http://local.mydomain.com/getAuthToken?message=the original message");

そして、(fbパーミッションを受け入れた後)MVCアプリに戻ると、getAuthTokenアクションがURIにリクエストを送信します。

 https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&code={2}&redirect_uri={3}

この方法の使用:

 using (var wc = new WebClient()){
      wc.DownloadString(...)
 }

ここで、リダイレクトURIは次のようにエンコードされます。

 HttpUtility.UrlEnconde("http://local.mydomain.com/getAuthToken?message=the original message");

元のメッセージ」にスペースが含まれていない場合は機能しますが、スペースやその他の特殊文字を追加し始めると、OAuth例外が発生します。

確認コードの検証中にエラーが発生しました

だから私の質問は、それを機能させるためにどのようなURLエンコンディングを使用する必要があるかということです

ここで何かを見つけましたが、同じエラーが発生します。リダイレクトを行うために特別なメソッドが必要かどうか、またはこの2つのリクエストに異なるエンコーディングが必要かどうかはわかりません。

4

2 に答える 2

0

DinoCheisaの優れたOAuth.Managerクラスをご覧になることをお勧めします。これにより、URLエンコードが適切に行われます。http://cheeso.members.winisp.net/OAuthManager1.1/html/N_OAuth.htmから入手できます。

于 2012-04-21T20:01:05.823 に答える
0

これを解決するために、これを使用してエンコードしました。

static public string EncodeTo64(string toEncode)
  {
     byte[] toEncodeAsBytes
           = Encoding.ASCII.GetBytes(toEncode);
     string returnValue
           = Convert.ToBase64String(toEncodeAsBytes);
     return returnValue;
  }

そしてこれをデコードします

  static public string DecodeFrom64(string encodedData)
  {
     byte[] encodedDataAsBytes
         = Convert.FromBase64String(encodedData);
     string returnValue =
        Encoding.ASCII.GetString(encodedDataAsBytes);
     return returnValue;
  }

誰かがそれを必要とする場合に備えてThaks

于 2012-07-13T22:04:51.530 に答える