如何将参数从MVC传递给Silverlight

时间:2015-01-05 12:40:53

标签: c# asp.net asp.net-mvc silverlight

在MVC项目认证之后,我需要一个关于如何在按钮点击后传递参数安全的解决方案

我做了以下代码

<form action="http://localhost:53988/Default.aspx" method="post" -- this is where is hosted SilverlightApp>
    <input type="hidden" name="session" value="@(Helpers.Context.CurrentSession.ID)"/>
    <input type="submit" value="RedirectToSilver" />
</form>

在Silverlight aspx页面(Default.aspx)中我得到了这个参数

<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
          <param name="source" value="ClientBin/Client.xap?<%=AssemblyInfo.GetVersionNumber()%>" />
          <param name="minRuntimeVersion" value="4.0.50826.0" />
          <param name="initParams" value="sessionId = '<%=HttpContext.Current.Request["session"] %>'" />
          <param name="autoUpgrade" value="true" />
    </object>
</div>

和app.xaml.cs

private void Application_Startup(object sender, StartupEventArgs e)
{
    var sessionID= string.Empty;
    if (e.InitParams.ContainsKey("sessionId"))
        sessionID= e.InitParams["sessionId"];
}

一切正常但问题是客户端可以看到sessionID,我认为这不安全

http://i.stack.imgur.com/UQY70.jpg

我的目标是在没有向客户端显示的情况下将此会话ID安全地保存在Silverlight中?怎么做?

1 个答案:

答案 0 :(得分:0)

创建一个操作以返回会话ID,并让silverlight客户端调用该端点以获取当前会话ID。

<强>控制器

[Authorize]
public class SessionController : Controller {

    [HttpGet]
    public JsonResult Get() {
        return Json(Helpers.Context.CurrentSession.ID);
    }

}

<强>客户端

private async void Application_Startup(object sender, StartupEventArgs e) {
    var sessionID = string.Empty;
    var httpClient = new HttpClient();
    var url = "http://localhost:53988/Session";
    var response = await httpClient.GetAsync(url);
    if(response.IsSuccessStatusCode 
       && response.Content.Headers.ContentLength.GetValueOrDefault() > 0) {
        sessionID = await response.Content.ReadAsStringAsync();
    }
}

您可以对端点进行硬编码或使其可被发现,这取决于您。我展示的样本也假设您没有使用WebApi。如果你愿意的话,这应该很容易实现。 我个人认为所有这一切都试图隐藏会话ID是没有意义的,但我不知道你的情况。