首先,我们不得不使用处理身份验证和授权的现有Web框架。 Web项目使用表单身份验证并写入加密的cookie。用户信息作为属性暴露给aspx页面:
LoggedInUser.Current
这有几个属性,包括userId和角色列表。
我已经看过使用initParams,但在那里并不是很成功(编辑:我原来不能动态地做)。我创建了一个带有[Key]属性的简单POCO实体,但我至少需要能够将userId从aspx页面传递给嵌入的silverlight。
将动态对象从aspx传递到silverlight 4的最简单方法是什么?
谢谢slugster:
在aspx页面上设置initParams
<param name="initParams" value="<%=InitParam%>"/>
在代码背后:
private void LoadSilverlightParams()
{
LoggedInUser user = LoggedInUser.Current;
InitParam = "UserId=" + user.PersonId.ToString() + ",";
InitParam += "OrganizationId=" + user.OrganizationId.ToString() + ",";
InitParam += "RoleList=";
foreach(string s in user.Roles)
{
InitParam += s + "|";
}
InitParam.Remove(InitParam.Count() - 1);
}
(不漂亮,但有效) 然后使用Slugster的示例来使用Silverlight端的值。
警告:通过init params传递用户信息会将信息作为纯文本显示给查看页面的用户(他们只需要查看源代码)。我们最终使用身份验证域服务并使用与aspx相同的用户对象
答案 0 :(得分:0)
在silverlight应用程序的启动对象的构造函数中,您可以读取托管silverlight应用程序的aspx页面的查询字符串。
因此,您可以通过查询字符串传递id,然后使用该id调用wcf服务,该服务将返回您的POCO或任何可以通过网络序列化的对象。
获取查询字符串的示例如下所示。
string val = System.Windows.Browser.HtmlPage.Document.QueryString["id"];
希望这有帮助
答案 1 :(得分:0)
您有3个基本选项:
使用initParams,您可以通过逗号分隔的值列表发送,这些值可用作Silverlight控件的StartupEventArgs
部分中的键/值集合Application_Startup
参数。然后,您可以检查是否存在特定键,然后使用您找到的值重新水化数据对象:
private void Application_Startup(object sender, StartupEventArgs e)
{
if (e.InitParams != null && e.InitParams.Count > 0)
{
foreach (string key in e.InitParams.Keys)
{
switch (key.ToLower())
{
case "user":
MyAppDetails.UserId = int.Parse(e.InitParams["user"]);
break;
case "year":
MyAppDetails.SelectedYear = int.Parse(e.InitParams["year"]);
break;
case "userlogonname":
MyAppDetails.UserLogonName = e.InitParams["userlogonname"];
break;
case "currentyear":
MyAppDetails.CurrentYear = int.Parse(e.InitParams["currentyear"]);
break;
case "debuglevel":
MyAppDetails.DebugLevel = (AppDebugLevel)int.Parse(e.InitParams["debuglevel"] ?? "1");
break;
case "uitheme":
MyAppDetails.UITheme = e.InitParams["uitheme"];
break;
}
}
}
this.RootVisual = new MainPage();
}
(MyAppDetails
是全局可访问的(在SL应用程序内)静态对象)。使用此方法,我可以在aspx页面内的运行时动态填充initParams。
让你开始的一些链接是我here和here的一些前答案,以及很久以前我对同一主题的问题的回答here(这个答案更倾向于WCF的做事风格。)