从另一个类

时间:2017-07-06 13:04:30

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

我想保存一些变量供将来参考,所以我宣布了一个类Container.cs

public class Container
{
    public static String verifierCode;
}

然后我有HomeController.cs我更新Container的变量值:

public class HomeController : Controller
{
    public ActionResult ValidateTwitterAuth()
    {
        Container.verifierCode = Request.Query.ElementAt(2).Value;
        //do some stuff
    }
    public String sendTweet(String NewTweet)
    {
        var userCreds = AuthFlow.CreateCredentialsFromVerifierCode(Container.verifierCode, Container.authorizationId);
        var user = Tweetinvi.User.GetAuthenticatedUser(userCreds);
        user.PublishTweet(NewTweet);
        return "sent!";
    }
}

它会在ValidateTwitterAuth中使用特定值进行更新,但在调用sendTweet方法时,Container.verifierCode为空。 我显然试图调试它,但如果我将变量添加到quickwatch我得到

  

错误CS0103:当前上下文中不存在名称“容器”

此外,类和容器都在同一名称空间中。 任何想法/提示为什么会发生这种情况?我只是想声明一个我可以从其他类/控制器访问的全局变量。

如果这听起来像是一个初学者问题,我很抱歉,但我刚开始接触asp.net

编辑:从答案来看,我处理问题的方式是错误的。因此我安装了Microsoft.AspNetCore.Session NuGet包并使用它:

 HttpContext.Session.SetString("verifierCode", Request.Query.ElementAt(2).Value);
 HttpContext.Session.SetString("authorizationId", Request.Query.ElementAt(0).Value);

现在它有效。谢谢大家的答案!

1 个答案:

答案 0 :(得分:2)

您可以将此数据存储到session而不是class.as,如下例所示

public class HomeController : Controller
    {
        public ActionResult ValidateTwitterAuth()
        {
            Session["verifierCode"] = Request.Query.ElementAt(2).Value;
            //do some stuff
        }
        public String sendTweet(String NewTweet)
        {
            var userCreds = AuthFlow.CreateCredentialsFromVerifierCode(Session["verifierCode"], Container.authorizationId);
            var user = Tweetinvi.User.GetAuthenticatedUser(userCreds);
            user.PublishTweet(NewTweet);
            return "sent!";
        }
    }

我刚刚更改了验证码