0

問題修正,見下文ASP.NET MVC - 會話狀態沒有通過 - >斷點不工作

我在做什麼是這樣的:

生成隨機數 - >商店它在一個會話 - >將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函數返回一個局部視圖,其中包含一個帶有註冊URL的按鈕,導致Facebook。 Facebook返回到localhost:xxx/Account/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方法中的斷點擊中)。

我希望任何人都可以幫助我。提前致謝!

回答

1

哦,上帝,那很愚蠢。發佈後(在尋找類似2小時的解決方案後),我發現問題出在哪裏:

Visual Studio更改了我的應用程序運行的端口。我將其設置爲固定端口(右鍵單擊MVC項目 - > web - >特定端口),現在它工作正常。

我現在覺得很愚蠢......