Muh*_*han 1 c# silverlight session session-variables windows-phone-7
我正在创建一个Windows 7移动Silverlight项目.我使用Rest api进行身份验证,使用类认证.我得到一个身份验证令牌作为响应,并将其分配给类属性AuthToken,因为我需要在不同的地方使用它.有没有办法将此AuthToken存储在会话或其他任何内容中.因为我在wp7中没有找到任何会话示例.谢谢
如果您想要临时会话存储(应用程序的生命周期,包括用户使用后退按钮返回到您的应用程序),那么您可以使用电话状态.电话状态类似于ASP.NET中的会话状态.它只是一个带有字符串键的(可序列化)对象的字典,并且不会在应用程序的启动时进行维护,但是当您的应用程序从后向堆栈导航到时,它会被恢复.
下面是一个用于恢复名为myObject的自定义对象的示例:
private CustomObject myObject;
protected override void OnNavigatedFrom(NavigationEventArgs args)
{
//Save to State when leaving the page
PhoneApplicationService.Current.State["myObject"] = myObject;
base.OnNavigatedFrom(args);
}
protected override void OnNavigatedTo(NavigationEventArgs args)
{
if (PhoneApplicationService.Current.State.ContainsKey("myObject"))
{
//Restore from State
myObject = (CustomObject)PhoneApplicationService.Current.State["myObject"];
}
else
{
//No previous object, so perform initialization
myObject = new myObject();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在应用程序的所有实例中存储设置,请查看最适合的IsolatedStorageSettings.根据您的需求还有其他选择(Charles Petzold有一个免费的电子书,有一些很好的例子).
不确定为什么上面的代码不适合你,但另一种选择是使用使用IsolatedStorageSettings保存的app属性.这是一个例子:
在App.xaml.cs中:
public bool VibrationOn { get; set; }
private void Application_Launching(object sender, LaunchingEventArgs e)
{
LoadSettings();
}
private void Application_Activated(object sender, ActivatedEventArgs e)
{
LoadSettings();
}
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
SaveSettings();
}
private void Application_Closing(object sender, ClosingEventArgs e)
{
SaveSettings();
}
private void LoadSettings()
{
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
bool vo;
if (settings.TryGetValue<bool>("VibrationOn", out vo))
VibrationOn = vo;
else
VibrationOn = true;
}
private void SaveSettings()
{
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
settings["VibrationOn"] = VibrationOn;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下代码访问应用程序中任何位置的此属性:
if (Application.Current.VibrationOn)
{
VibrateController.Default.Start(TimeSpan.FromMilliseconds(200));
}
Run Code Online (Sandbox Code Playgroud)