c# - HttpContext.Current.Session ["accesstoken".ToString() 为 null 应该设置值时

标签 c# asp.net .net asp.net-mvc asp.net-mvc-4

我在 Session["accesstoken"] 中设置从 facebook 检索的 accesstoken。当我尝试检索它时,我遇到了 nullreferenceexception。

为什么?

在我开始使用 AddAdditionalPermissions 方法之前它确实有效,但我看不出这会如何干扰 session ...?

在 Debug模式下,我从 result.ExtraData["accesstoken"] 复制了值,并通过 formscollection(如您在 Facebook.cs 中看到的那样)将其添加到代码中,并且 token 有效。我应该改用 cookie 吗?

AccountController.cs

    public ActionResult ExternalLoginCallback(string returnUrl)
    {
        AuthenticationResult result =   
        OAuthWebSecurity.VerifyAuthentication(
                Url.Action("ExternalLoginCallback",
                new { ReturnUrl = returnUrl }));
        if (!result.IsSuccessful)
        {
            return RedirectToAction("ExternalLoginFailure");
        }

        // Save the accesstoken into session
        Session["accesstoken"] = result.ExtraData["accesstoken"];
        Session["id"] = result.ExtraData["id"];

        if (OAuthWebSecurity.Login(result.Provider, result.ProviderUserId, createPersistentCookie: false))
        {
            AddAdditionalPermissions();
            return RedirectToLocal(returnUrl);
        }(...etcetera) 

AdditionalPermissions 函数:

private void AddAdditionalPermissions() { string facebook_urlAuthorize_base = "https://graph.facebook.com/oauth/authorize"; string facebook_urlGetToken_base = "https://graph.facebook.com/oauth/access_token"; string facebook_AppID = "1secretappIdhere242341"; string facebook_AppSecret = "1secretcodeheteq4426";

        string scope = "publish_stream"; 
        string urlAuthorize = facebook_urlAuthorize_base;
        urlAuthorize += "?client_id=" + facebook_AppID;
        urlAuthorize += "&redirect_uri=" + "http://localhost:2730/";
        urlAuthorize += "&scope=" + scope;

        Response.Redirect(urlAuthorize, true);             
    }

Facebook.cs

public void PostToFacebook(FormCollection fm) { var fb = new FacebookClient();

        fb = new FacebookClient(HttpContext.Current.Session["accesstoken"].ToString());
        var args = new Dictionary<string, object>();
        args["message"] = "abc";

        fb.Post("/me/feed", args);
    }

最佳答案

我认为您的 session token cookie 丢失了。尝试不通过替换

来终止当前页面响应
Response.Redirect(urlAuthorize, true);       

Response.Redirect(urlAuthorize, false);     

看看有没有帮助。

关于c# - HttpContext.Current.Session ["accesstoken".ToString() 为 null 应该设置值时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753717/

相关文章:

c# - 使用 C# 的 Optimus headless 浏览器

c# - 在 C# 中转换数组的优雅方式?

c# - 如何在 .Net 的 GoogleWebAuthorizationBroker.AuthorizeAsync 方法中发送存储为 json 字符串(在数据库中)的 Google 驱动 token ?

c# - 如何调用global.asax中的 Controller 方法?

.net - 正则表达式使用单词边界,但单词以 . (时期)

c# - Sitecore 通过静默和搜索保存

c# - 与 ASP.NET 4 和 SQL Server 中的存储过程一起使用的 ORM

ASP.NET WebForms - 如何在 GridView 中设置标题行的 colspan?

c# - 使用 Rhino Mocks 模拟私有(private)对象调用

.net - 引发NullReferenceException时检测目标对象是什么