如何从 Silverlight 应用程序自动登录到另一个页面

本文关键字:登录 另一个 Silverlight 应用程序 | 更新日期: 2023-09-27 17:56:56

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

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

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

类似的东西

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

但具有发布功能除外。

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

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

如何从 Silverlight 应用程序自动登录到另一个页面

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

尽管上述答案有助于解决我的问题,但我将为那些遇到类似问题的人添加更多细节。

在包含 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页面,那么这将不是问题。