如何从Silverlight应用程序自动登录到其他页面?

时间:2011-05-20 06:18:25

标签: c# silverlight-4.0

我编写了一个Silverlight页面,作为现有Web应用程序的帐户注册工具。因此,它收集用户详细信息,然后通过WCF RIA服务将其提交到服务器,在该服务中,帐户在数据库中创建。

基本上我想在服务返回注册成功时自动将用户登录到应用程序但我不确定如何执行此操作。

我目前的想法是,如果我可以将用户名和密码发布到现有的登录页面,那么一切都会好的。然而,虽然我可以找到很多关于如何从Silverlight发布HTTP帖子的示例,但他们似乎主要假设我想在现有的Silverlight应用程序中显示响应 - 我没有,我希望Silverlight应用程序消失我希望显示登录的应用程序,就好像我点击了登录页面上的登录按钮一样。

的内容
HtmlPage.Window.Navigate(new Uri("http://mysite.com/Login.aspx", UriKind.Absolute));

除了发布功能。

我不想在查询字符串中传递用户名和密码。

任何人都知道如何做到这一点?或者,如果这不是正确的方法,有人会指出我正确的方向。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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应用程序中,当服务成功返回时,我添加了以下代码来登录Web应用程序:

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 =“server”。我不得不这样做,因为我在发布的登录页面上收到了“验证ViewState MAC失败”错误。起初我尝试将其添加到web.config:

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

但这些选项的有所不同。当然,如果您使用普通的HTML页面,那么这不会是一个问题。