У меня проблема с тем, что мой ответный URL-адрес Iframe заменяет URL-адрес моего родителя (браузера) вместо открытия внутри Iframe.
У меня есть страница приложения (default.aspx), к которой я получаю доступиз браузера.На этой странице я загрузил iframe, передав 3 URL
- . / Ответ? Stauts = отменить
- . / Ответ? Статус = Отклонить
- . / Ответ? Статус = подтверждено
Фрагмент кода отправки формы на URL-адрес iFrame.
<%@ Page Language="C#" %>
<script runat="server">
bool _postLoadCustom = false;
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
string CANCELURL = Request.Params["CANCELURL"];
string ERRORURL = Request.Params["ERRORURL"];
string REDIRECTURL = Request.Params["REDIRECTURL"];
{
NameValueCollection data = new NameValueCollection();
data.Add("__CANCELURL", CANCELURL);
data.Add("__ERRORURL", ERRORURL);
data.Add("__REDIRECTURL", REDIRECTURL);
RedirectAndPOST(this.Page,"https://IframeURL/Content", data);
}
}
#region RedirectAndPost
public static void RedirectAndPOST(Page page, string destinationUrl,NameValueCollection data)
{
string strForm = PreparePOSTForm(destinationUrl, data);
page.Controls.Add(new LiteralControl(strForm));
}
private static String PreparePOSTForm(string url, NameValueCollection data)
{
string formID = "PostForm";
StringBuilder strForm = new StringBuilder();
strForm.Append("<form id=\"" + formID + "\" name=\"" +
formID + "\" action=\"" + url +
"\" method=\"POST\">");
foreach (string key in data)
{
strForm.Append("<input type=\"hidden\" name=\"" + key +
"\" value=\"" + data[key] + "\">");
}
strForm.Append("</form>");
//Build the JavaScript which will do the Posting operation.
StringBuilder strScript = new StringBuilder();
strScript.Append("<script language='javascript'>");
strScript.Append("var v" + formID + " = document." +
formID + ";");
strScript.Append("v" + formID + ".submit();");
strScript.Append("<" + "/script>");
return strForm.ToString() + strScript.ToString();
}
#endregion
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
Loading...
</body>
</html>
Когда я завершу путешествие по Iframe и нажму "Отправить" (кнопка iframe), я получу один из следующих вариантов:URL, который я передал стороннему сервису через Iframe.Из этого URL я извлекаю информацию (статус).URL-адрес, который я получил в ответ, должен быть перенаправлен на Iframe, но он заменяет мой текущий URL-адрес (default.aspx).
Ниже кода находится страница моего ответа, которую я использовал для извлечения информации из URL-адреса ответа и сохранения в сеансе..
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
public void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
return;
}
else
{
string url = HttpContext.Current.Request.Url.AbsolutePath;
string status = Request.QueryString["status"].Split('-')[0];
string sessionID = Request.QueryString["status"].Split('-')[1];
string exampleServerUrl = ConfigurationManager.AppSettings["ServerURL"];
String sessionName = "ProductBase_1_0_0_0";
string request =
@"
<server><requests>
<resumeSession sessionID=""{0}""/>
<Session.setElementRq path=""data/policyAdmin/policynotes/FITSStatus"" value=""{1}""/>
</requests></server>";
request = string.Format(request, sessionID, status);
string response = this.HTTPPost(exampleServerUrl, request);
}
}
private string HTTPPost(string url, string requestXML)
{
string result = null;
System.Net.HttpWebRequest wr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
wr.Timeout = 90000;
wr.ServicePoint.ConnectionLimit = 10;
wr.Method = "POST";
wr.ContentType = "text/xml";
byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(requestXML);
System.IO.Stream strm = wr.GetRequestStream();
strm.Write(byteArray, 0, byteArray.Length);
strm.Close();
System.Net.WebResponse resp = wr.GetResponse();
System.Text.Encoding enc = Encoding.GetEncoding("utf-8");
System.IO.StreamReader reader = new System.IO.StreamReader(resp.GetResponseStream(), enc);
result = reader.ReadToEnd();
reader.Close();
resp.Close();
return result;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
<form id="paypageresponce" runat="server" method="post">
<!--#include file="Response.html"-->
<label>Payment in progress...</label>
</form>
</body>
</html>
Я включил страницу Response.html, с которой я вызвал функцию javascript, чтобы автоматически нажимать кнопку приложения.
Я интенсивно гуглил, чтобы найти решение, но не повезло.Я попытался заменить URL-адрес iFrame, но это не было разрешено из-за безопасности службы.
Я отладил код и достиг того момента, когда при нажатии кнопки отправки iframe мой URL-адрес response.aspx заменил мойdefault.aspx.
Любой может сообщить мне, почему URL-адрес ответа заменяет перенаправление на IFrame.