2

我正在为一个项目,它有网络花园场景,并不能保留会话/内存中的任何数据。 asp.net页面从Appian(bpm工具)打开,我们通过查询字符串传递id。 现在,客户端要求我在阅读后隐藏查询字符串参数。但是,在这种情况下,登录页面为http://a.aspx?id='123',读取该值后,我们必须重定向到b.aspx而不公开id(查询字符串)。 请建议我一个合适的方法来实现这一点。我真的不知道这个。重定向到一个页面隐藏查询字符串参数asp.net

回答

3

您可以将键/值对添加到标题中,它将不会在查询字符串中可见。

HttpContext.Current.Response.Headers.Add(key, value); 

string headerVal = HttpContext.Current.Request.Headers[key]; 
+0

b.aspx代码可以请你给我一个例子(如果可能的话甚至是粗略的)? – rahulsen002

+0

代码将在负载平衡的情况下部署在多个服务器中。所以,假设第一个请求被发送到服务器A,在那里你设置了键值对,第二个请求将被发送到服务器B,在那里它不会得到值在httpcontext中设置。在这种情况下会出现这种情况吗? – rahulsen002

+0

服务器A可以设置变量,服务器B可以读取它们。标题存储在文档中,以便它们能够传播。测试它... –

0

您可以在服务器端或HTTP POST而不是GET使用会话变量。

Session["id"] = id; 

然后在b的负载检索它。

要使用Post可以使用隐藏字段和表单。

//You can set it like this 
<form name='IdForm' action='b.aspx' method='post'>> 
<asp:HiddenField id="WhateverId" runat="server" value='<%= Request.QueryString["whateverID"] %>' /> 
</form> 

在重定向使用JavaScript发布

function Redirect() { 
    document.forms["IdForm"].submit(); 
} 

您必须使用此哪里重定向发生JS脚本。

终于在背后

HttpContext.Current.Request.Form["WhateverId"] 
+0

代码将被部署在负载平衡的服务器中,所以不能使用会话。 – rahulsen002

+1

共享会话可以实现。 –

+0

你也可以通过用户会话来负载平衡服务器,而不是请求。您的性能下降几乎不存在,您将可以使用Session。这里唯一的缺点是,如果一台服务器出现故障,您的用户必须重新登录 –

相关问题