2011-05-20 30 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頁面,那麼這不會成爲問題。

相關問題