Мой ответный URL от Iframe заменит мой полный URL браузера - PullRequest
1 голос
/ 15 июня 2019

У меня проблема с тем, что мой ответный URL-адрес Iframe заменяет URL-адрес моего родителя (браузера) вместо открытия внутри Iframe.

У меня есть страница приложения (default.aspx), к которой я получаю доступиз браузера.На этой странице я загрузил iframe, передав 3 URL

  1. . / Ответ? Stauts = отменить
  2. . / Ответ? Статус = Отклонить
  3. . / Ответ? Статус = подтверждено

Фрагмент кода отправки формы на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...