我正在尝试制作一个XBAP应用程序,通过登录与webservice进行通信。但我希望用户跳过登录步骤,如果他们已经在过去七天登录。我用html/aspx让它工作。但是它在XBAP中持续失败。
调试时,应用程序被赋予完全信任。
到目前为止,我编写cookie的代码如下:
protected static void WriteToCookie(
string pName,
Dictionary<string, string> pData,
int pExiresInDays)
{
// Set the cookie value.
string data = "";
foreach (string key in pData.Keys)
{
data += String.Format("{0}={1};", key, pData[key]);
}
string expires = "expires=" + DateTime.Now.AddDays(pExiresInDays).ToUniversalTime().ToString("r");
data += expires;
try
{
Application.SetCookie(new Uri(pName), data);
}
catch (Exception ex)
{
}
}这就是我要读的饼干:
protected static Dictionary<string, string> ReadFromCookie(
string pName)
{
Dictionary<string, string> data = new Dictionary<string, string>();
try
{
string myCookie = Application.GetCookie(new Uri(pName));
// Returns the cookie information.
if (String.IsNullOrEmpty(myCookie) == false)
{
string[] splitted = myCookie.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
string[] sub;
foreach(string split in splitted)
{
sub = split.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
if (sub[0] == "expires")
{
continue;
}
data.Add(sub[0], sub[1]);
}
}
}
catch(Exception ex)
{
}
return data;
}pName设置为:
string uri = "http://MyWebSiteName.com";当用户第一次进行身份验证时,我调用WriteToCookie函数并将其设置为7天到期。看起来一切都很好,因为我得到的错误信息也不例外。(我抓到了一个断点)
在此之后,我将结束会话并重新启动它。我做的第一件事就是一个ReadFromCookie。然后,我得到了以下消息的异常:没有更多的数据可用,所以我的应用程序将自动将用户发送回登录屏幕。
我还试图在同一会话的ReadFromCookie之后执行WriteToCookie,并得到相同的错误。
Application.SetCookie(new Uri("http://MyWebSiteName.com/WpfBrowserApplication1.xbap"), "Hellllo");
string myCookie2 = Application.GetCookie(new Uri("http://MyWebSiteName.com/WpfBrowserApplication1.xbap"));在我看来,饼干一开始都没有写好。所以我猜我做错了什么。也许我用的uri是错的。是否需要一种特定的格式?就像您需要一个非常特定的格式的到期日期。
我在互联网上搜索了很多关于使用XBAP的cookies的示例/教程,但是我找不到任何文档和测试都很好的东西。很多人说它有效,但没有真正的样本来尝试。很多人也在html中处理身份验证,然后在成功阅读/编写cookie之后转到XBAP。如果可能的话,我更喜欢一个完整的XBAP解决方案。
要在提问前回答一些问题,以下是项目设置:
我还创建了一个证书,并添加了像在显示“发布者无法验证”消息中解释的3家商店,这样我就不再有警告弹出了。我只是想确保这不是许可问题。
发布于 2015-05-05 14:21:21
终于找到了这个问题的答案。
感谢这个CodeProject,我终于能够从XBAP代码中编写/读取cookies了。正如我已经猜到的,URI需要非常具体,并且不能传递您想要的所有内容。
诀窍是什么:BrowserInteropHelper.Source
最后,读/写代码看起来如下:
Application.SetCookie(BrowserInteropHelper.Source, data);
string myCookie = Application.GetCookie(BrowserInteropHelper.Source);看起来,您无法使用“;”来分隔您自己的数据。如果这样做,您将只获得数据中的第一个条目。使用不同的分隔符(例如:':'),然后可以将所有数据返回如下所示:
n=something:k=somethingElse;expires=Tue,2015年5月12日,14:18:56格林尼治标准时间;
我唯一没有从Application.GetCookie得到的是到期日期。不确定这是否正常。也许是因为某种原因自动冲了出来。如果有人知道为什么,我希望有一个意见,以启发我。
至少现在我可以将数据读写到XBAP中的cookie中。嗯!
https://stackoverflow.com/questions/30017765
复制相似问题