ASP.NET MVC - 未传递会话状态 - >断点不起作用

时间:2012-05-08 21:27:41

标签: asp.net-mvc facebook visual-studio-2010 debugging session-state

问题已解决,请参阅下文

我正在做的是:

生成随机数 - >将其存储在会话中 - >用Facebook的OAuth服务的'state'参数传递给facebook - >验证返回的状态是否与我的会话中的状态相同(这是为了CSRF保护)。

这总是有效,没问题。但不知何故,它不再工作(Session似乎是空的,因为当我尝试读取它时,我得到一个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方法中的断点 点击)。

我希望有人能帮助我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

天哪,那太愚蠢了。发布之后(寻找2小时的解决方案后)我发现了问题所在:

Visual Studio更改了运行我的应用程序的端口。我将其设置为固定端口(右键单击MVC项目 - &gt; web - &gt;特定端口),现在它正常工作。

我现在感到愚蠢......