2010-08-12 98 views
4

我已经看到了关于Silverlight 2中提出了这个问题,但我还没有看到有关Silverlight 4Silverlight 4中获取当前用户

任何问题,有没有办法让运行在Silverlight 4.0的应用程序的当前用户?我以为我记得把它看作是4.0的一个功能,但我找不到它。 (也许这只是我的一厢情愿。)我会想象它必须来自运行浏览器或浏览器本身的操作系统。 (该应用程序没有在本地安装,它在浏览器中运行)

我有一个解决方案,我调用Web服务方法,只是执行以下操作以获取用户名。不过,我想不必拨打网络服务

HttpContext.Current.User.Identity.Name.ToUpper(); 

在此先感谢!

回答

1

您可能会发现更容易只是名称传递到Silverlight应用程序作为参数

+0

如果你可以动态地改变页面的上下文(如在一个ASPX或MVC视图)http://nerddawg.blogspot.com/2008/03/how-to-pass-initialization- params-to.html 而不是startPage = Page1写入用户名= <%= User.Identity.Name%> – mcintyre321 2010-08-12 19:23:34

+0

如果您确实需要,请让Silverlight查询用户名的当前网址 – mcintyre321 2010-08-12 19:24:29

+0

对于迟到的回复,抱歉。简单的解决方案是打开通过身份验证您的IIS网站。然后在default.aspx(或者什么asp页面启动你的应用程序)把用户放入这样的InitParams中并在mainpage.xaml.cs中读取它们:'System.Text.StringBuilder sb = new System.Text.StringBuilder( ); sb.Append(““); InitParams.Text = sb.ToString()' – hewstone 2011-06-09 13:19:35

2

获取标准Inbrowser Silverlight应用程序中的用户名客户端只是不会发生,如果可能的话,这将是一个非常糟糕的安全方面的明智之举。

就个人而言,如果我有这个要求,我可能会使用一些Web服务,WCF或简单的IHttpHandler服务器端。不过,我会倾向于把它称为“UserContext”,并发送XML。 XML将包含用户名。这将允许将更多的用户特定状态添加到XML,因为进一步的要求变得清晰。添加这些新的信息块很容易。

1

在您的Silverlight对象标签中添加一个名称为initParam的新参数(请注意套管)。通过这个,你可以传递值为key = value [,key = value,...]对。 在这里,我将一个关键的身份和价值作为当前用户身份名称。

<param name="initParams" value='[email protected]'/> 

在你App.xaml.cs在Application_StartUp你有下面的代码

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    this.RootVisual = new MainPage(); 
    if (e.InitParams.ContainsKey("usrIdentity")) 
    { 
     //I have a public static string WindowsUser on my MainPage.xaml.cs 
     MainPage.WindowsUser = e.InitParams["usrIdentity"]; 
    } 
} 

这是hewstone的建议。 MS链接是http://msdn.microsoft.com/en-us/library/cc189004(v=vs.95).aspx

+0

此解决方案不起作用。 – 2015-04-26 06:53:25

0

对@Vishnoo Rath的更正;你应该试试这个:

<param name="initParams" 
     value="usrIdentity=<%=HttpContext.Current.User.Identity.Name%>"/>