0

問題が修正されました。以下を参照してください

私がしていることはこれです:

乱数を生成する->セッションに保存する->FacebookのOAuthサービスの「state」パラメーターを使用してFacebookに渡す->返された状態が私のセッションの状態と同じであることを確認する(これはCSRF保護のために行われます) 。

これは常に機能しましたが、問題ありません。しかし、どういうわけか、それはもう機能していません(セッションを読み込もうとすると、NullReferenceExceptionが発生するため、セッションは空のようです)。おそらく何かを変えたのですが、何がわからないのです。

Facebookから状態が返されるコードの部分にブレークポイントを設定しようとしましたが、どういうわけかブレークポイントにヒットしません...ブレークポイント間のコードは実行されますが、ブレークポイントはヒットしません。

これはすべてを実行しているコードです:

public ActionResult SignUpButton()
{
    int random = RandomHelpers.GetRandomInteger(null);
    Session.Add("facebookState", random.ToString(CultureInfo.InvariantCulture));

    ViewBag.Uri = "https://www.facebook.com/dialog/oauth?" +
        "client_id=" + _facebookAuthenticationService.GetAppId() + 
        "&redirect_uri=" + _facebookAuthenticationService.GetReturnUri() + 
        "&scope=email" +
        "&state=" + random;

    return PartialView();
}

public ActionResult Register()
{
    string error = Request.QueryString["error"];
    string state = Request.QueryString["state"];
    string originalState = Session["facebookState"].ToString();

(簡潔にするために残りを削除しました)。SignUpButton関数は、FacebookにつながるサインアップURLを持つボタンを含む部分ビューを返します。Facebookはlocalhost:xxx / Account / Register(これはRegister関数です)に戻り、この関数はヒットし(ただし、Registerのブレークポイントは何もしません)、Session["facebookState"]。ToString( ) 部。

これは、web.configのセッション関連の設定がどのように見えるかです。

<sessionState mode="InProc">
  <providers>
    <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </providers>
</sessionState>

私はそれを理解することができません。エラーが発生せず、FacebookグラフAPIからデータが返されるようにコードを書き直しましたが、コードのその部分をデバッグできないことは受け入れられません(記録のために:SingUpButtonメソッドのブレークポイントヒットします) 。

誰かが私を助けてくれることを願っています。前もって感謝します!

4

1 に答える 1

1

なんてこった、それはばかだった。これを投稿した直後(2時間ほど解決策を探した後)、問題が何であるかがわかりました:

Visual Studio は、アプリケーションが実行されているポートを変更しました。それを固定ポートに設定しました(MVCプロジェクトを右クリック-> Web->特定のポート)、今では正常に動作しています。

私は今、愚かだと感じています...

于 2012-05-08T21:30:56.950 に答える