3

我有一个页面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”。有什么可以帮忙的吗?

4

5 回答 5

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 的容器。

编辑2

如果在这种情况下安全是您关心的问题并且您不希望公开值 [ "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();
    }
}
于 2010-06-11T10:16:22.883 回答
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 
于 2010-06-11T09:56:16.727 回答
1

您需要在 url 中传递值或将其发布到跨页面回发中。

对于安全的跨域通信,请查看 SAML(安全断言标记语言)。它是跨域边界安全地传递信息的标准方式。它最常用于单点登录场景,但它可用于安全地传递数据。你在使用证书吗?您使用的是什么类型的加密?

另一种选择是将状态保存到两个域都可以访问的数据库或文件系统。

于 2010-06-11T09:57:20.527 回答
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,几乎所有东西。

于 2010-06-11T10:15:58.137 回答
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"]在接收页面上使用来获取值。

于 2010-06-11T10:00:05.343 回答