我有一个页面 www.senderdomain.com/sender.aspx ,我需要将其写入其他域中的其他页面 www.receiverdomain.com/receiver.aspx
在sender.aspx中,我写了
Response.Write("Hello");
Response.Redirect(Request.UrlReferrer.ToString());
它被重定向到相应的receiver.aspx页面,但我不知道如何在receiver.aspx页面中获取文本“Hello”。任何人都可以帮忙吗?
答案 0 :(得分:1)
在查询字符串中传递数据,因为不能这样做
例如
Response.Redirect(Request.UrlReferrer.ToString() + "?mytext=hello");
在接收者页面中访问查询字符串数据,将解决您的问题。
use private algorithm like
string message = "hello";
add 1 to each char so that hello become ifmmp
and on receiver side -1 from each char so it will be hello
答案 1 :(得分:1)
您需要传递网址中的值或将其发布在跨页回发中。
要进行安全的跨域通信,请查看SAML(安全断言标记语言)。它是跨域边界安全传递信息的标准方法。它最常用于单点登录方案,但可用于安全地传递数据。你在使用证书吗?你使用什么类型的加密?
另一种选择是将状态保存到两个域都可访问的数据库或文件系统。
答案 2 :(得分:1)
您似乎在Sender.aspx上有一个值,您需要在receiver.aspx中显示。这就是你如何做到的。
//On Page_Load of sender.aspx
Session["fromSender"] = "Hello";
Respone.Redirect("receiver.aspx");
Response.End();
//On Page_Load of receiver.aspx
if(!string.IsNullOrEmpty(Session["fromSender"].ToString()))
Response.Write(Session["fromSender"].ToString());
如果域名发生变化,最简单的方法是在查询字符串中传递值。
//On Page_Load of sender.aspx
Response.Redirect("http://www.receiverdomain.com/receiver.aspx?fromSender=Hello");
Response.End();
//On Page_Load of receiver.aspx
if(!string.IsNullOrEmpty(Request.QueryString["fromSender"].ToString()))
Response.Write(Request.QueryString["fromSender"].ToString());
您可能会发现代码模式保持不变,用于传输值的容器从Session更改为QueryString。
如果在这种情况下您需要考虑安全性,并且您不希望公开值["Hello"
],那么另一种方法可以帮助您。在此解决方案中,我们将首先将页面重定向到接收器,然后从接收器重定向它将向发送者请求值。所以首先我们将为接收器编写代码。
//On Page_Load of receiver.aspx
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//Remember to use System.Net namespace
HttpWebRequest requestToSender = (HttpWebRequest)WebRequest.Create("http://www.senderdomain.com/sender.aspx?cmd=getvalue");
HttpWebResponse responseFromSender = (HttpWebResponse)requestToSender.GetResponse();
string fromSender = string.Empty;
//Remember to use System.IO namespace
using (StreamReader responseReader = new StreamReader(responseFromSender.GetResponseStream()))
{
fromSender = responseReader.ReadToEnd();
}
Response.Write(fromSender);
Response.End();
}
}
在sender.aspx中
//On Page_Load of sender.aspx
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (!string.IsNullOrEmpty(Request.QueryString["cmd"].ToString()))
{
string cmd = Request.QueryString["cmd"].ToString();
if (cmd.Equals("getvalue", StringComparison.OrdinalIgnoreCase))
{
Response.Clear();
Response.Write("Hello");
Response.End();
}
}
Response.Redirect("http://www.receiverdomain.com/receiver.aspx");
Response.End();
}
}
答案 3 :(得分:0)
Response.Redirect
方法会废弃您写入页面的所有内容,并将其替换为重定向页面,因此您无法随重定向一起发送任何内容。
在重定向中发送数据(在不同域和不同服务器之间工作)的唯一选择是将其放入URL本身。例如:
string message = "Hello";
Response.Redirect(Request.UrlReferrer.ToString() + "?msg=" + Server.UrlEncode(message));
另一种选择是输出包含自动发布到目的地的表单的页面:
string message = "Hello";
Response.Write(
"<html>" +
"<head><title>Redirect</title></head>" +
"<body onload=\"document.forms[0].submit();\">" +
"<form action=\"" + Server.HtmlEncode(Request.UrlReferrer.ToString()) + "\" method=\"post\">" +
"<input type=\"hidden\" name=\"msg\" value=\"" + Server.HtmlEncode(message) + "\">" +
"</form>" +
"</body>" +
"</html>"
);
Response.End();
您可以在接收页面上使用Request.Form["msg"]
来获取值。
答案 4 :(得分:0)
如果您想在以后避免各种各样的问题,请不要使用内置的URL编码。
String UrlEncode(String value)
{
StringBuilder result = new StringBuilder();
foreach (char symbol in value)
{
if ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~".IndexOf(symbol) != -1) result.Append(symbol);
else result.Append("%u" + String.Format("{0:X4}", (int)symbol));
}
return result.ToString();
}
以上支持unicode,几乎所有内容。