2011-05-20 56 views
3

我写了一个Silverlight页面,它充当现有Web应用程序的帐户注册工具。因此它会收集用户的详细信息,然后通过WCF RIA服务将其提交给服务器,其中帐户在数据库中创建。如何自动从Silverlight应用程序登录到其他页面?

基本上我想自动登录用户到应用程序,当服务返回注册成功,但我不确定如何做到这一点。

我目前的想法是,如果我可以将用户名和密码POST到现有的登录页面,那么一切都会好起来的。但是,虽然我可以找到很多关于如何从Silverlight执行HTTP帖子的示例,但他们大多数人似乎都假设我想在现有的Silverlight应用程序中显示响应 - 我不这样做,我希望Silverlight应用程序消失,我希望显示登录的应用程序,就好像我已经登录登录页面上的登录按钮一样。

沿

​​

东西线除与发布能力。

我不想在querystring中传递用户名和密码。

任何人都知道我该怎么做?或者,如果这不是正确的方法,有人可以指引我走向正确的方向。

回答

1

向托管Silverlight内容的HTML页面添加一个表单(可以隐藏)。然后从Silverlight内部使用DOM以编程方式提交表单。

+0

不错。我甚至没有考虑使用包含aspx页面。我会放弃它。 – 2011-05-22 22:38:15

+0

是的,这个工程。 – 2011-05-22 23:45:40

0

虽然上面的答案有助于解决我的问题,但我会为那些有类似问题的人添加更多的细节。

在含aspx页面我为表单添加标签内的用户名和密码两个隐藏字段:

<form id="form1" style="height:100%" action="http://mysite.com/Login.aspx" method="post"> 
    <input type="hidden" id="username" name="username" /> 
    <input type="hidden" id="password" name="password" /> 
    <div>silverlight app</div> 
</form> 

然后在当服务成功返回我的Silverlight应用程序添加以下代码,以登录到网站应用:

private void Logon(string username, string password) 
{ 
    HtmlElement usernameField = HtmlPage.Document.GetElementById("username"); 
    usernameField.SetAttribute("value", username); 

    HtmlElement passwordField = HtmlPage.Document.GetElementById("password"); 
    passwordField.SetAttribute("value", password); 

    HtmlPage.Document.Submit(); 
} 

你可能已经高于注意到我已删除上面的表格标记RUNAT =“服务器”。我必须这样做,因为我在发布的登录页面上收到“验证ViewState MAC失败”错误。起初,我尝试添加这在web.config:

<pages enableViewState="false" enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false"/> 

没有作出任何区别这些选项。当然,如果您使用的是正常的HTML页面,那么这不会成为问题。

相关问题