在另一个页面中读取Response.write

时间:2010-06-11 09:53:28

标签: asp.net response.redirect response.write

我有一个页面 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”。任何人都可以帮忙吗?

5 个答案:

答案 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。

EDIT2

如果在这种情况下您需要考虑安全性,并且您不希望公开值["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,几乎所有内容。