Сведения о вопросе

FromRussia

16:03, 1st July, 2020

Теги

javascript   c#   asp.net   forms   postback    

Как я могу опубликовать и затем перенаправить на внешний URL из ASP.Net?

Просмотров: 462   Ответов: 6

ASP.NET серверные элементы управления обратной связью на свою собственную страницу. Это приводит к тому, что вы хотите перенаправить пользователя на внешнюю страницу, но по какой-то причине (например, для аутентификации) должны разместить на этой странице сообщение.

HttpWebRequest отлично работает, если вы не хотите перенаправлять, а JavaScript в некоторых случаях подходит, но может стать сложным, если вам действительно нужен код на стороне сервера,чтобы собрать данные для публикации.

Так как же вы одновременно отправляете сообщение на внешний URL и перенаправляете пользователя на результат из вашего кода ASP.NET codebehind?



  Сведения об ответе

SEEYOU

18:03, 1st July, 2020

Вот я и решил эту проблему сегодня. Я начал с этой статьи на C# Corner, но нашел этот пример - хотя и технически обоснованный - немного неполным. Все, что он сказал, было правильно, но мне нужно было попасть на несколько внешних сайтов, чтобы собрать это вместе, чтобы работать именно так, как я хотел.

Это не помогло, что пользователь технически не подавал форму вообще; они нажимали ссылку, чтобы перейти в наш Центр поддержки, но чтобы войти в них, сообщение http должно было быть сделано на сайте Центра поддержки.

Это решение включает в себя использование HttpContext.Current.Response.Write() для записи данных для формы, а затем использование бита Javascript на форме.

<body onload=""> 

способ подачи формы на соответствующий URL.

Когда пользователь нажимает на ссылку Центр поддержки, вызывается следующий метод для записи ответа и перенаправления пользователя:

public static void PassthroughAuthentication()
{

    System.Web.HttpContext.Current.Response.Write("<body 
    onload=document.forms[0].submit();window.location=\"Home.aspx\";>");

    System.Web.HttpContext.Current.Response.Write("<form name=\"Form\" 
    target=_blank method=post 
    action=\"https://external-url.com/security.asp\">");

    System.Web.HttpContext.Current.Response.Write(string.Format("<input 
       type=hidden name=\"cFName\" value=\"{0}\">", "Username"));

    System.Web.HttpContext.Current.Response.Write("</form>");
    System.Web.HttpContext.Current.Response.Write("</body>");
}

Ключ к этому методу заключается в том, что onload бит Javascript, который, когда тело страницы загружается, отправляет форму, а затем перенаправляет пользователя обратно на мою собственную домашнюю страницу. Причина этой небольшой неприятности заключается в том, что я запускаю внешний сайт в новом окне, но не хочу, чтобы пользователь повторно отправлял скрытую форму, если они обновляют страницу. Плюс эта скрытая форма сдвинула страницу вниз на несколько пикселей, что действовало мне на нервы.

Меня бы очень заинтересовали любые более чистые идеи, которые у кого-нибудь есть на этот счет.

Эрик Сиппл


  Сведения об ответе

padenie

18:03, 1st July, 2020

Я начал с этого примера с CodeProject

Затем вместо добавления на страницу я позаимствовал у saalon (выше) и сделал Response.Write().


  Сведения об ответе

dump

18:03, 1st July, 2020

Я бы сделал запись формы в вашем коде за использованием класса HttpWebRequest. Вот хороший вспомогательный класс, чтобы начать работу:

http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

Оттуда вы можете просто сделать Response.Redirect, или, возможно, вам нужно изменить свое действие в зависимости от результата сообщения (если была ошибка, покажите ее пользователю или что-то еще). Я думаю, что у вас уже был ответ на ваш вопрос, чтобы быть честным - похоже, вы думаете, что это перенаправление post OR, когда на самом деле вы можете сделать их оба из вашего кода позади.


  Сведения об ответе

lesha

18:03, 1st July, 2020

Если вы используете ASP.NET 2.0, вы можете сделать это с помощью межстраничной публикации .

Edit: я пропустил тот факт, что вы спрашиваете о внешней странице. Для этого, я думаю, вам нужно будет иметь свой ASP.NET page gen в форме HTML, действие которой установлено на удаленный URL, а метод-на POST. (Используя межстраничную публикацию, это может быть даже другая страница без UI, только скрытые элементы формы.) Затем добавьте немного javascript, чтобы отправить форму, как только результат обратной передачи был получен на клиенте.


  Сведения об ответе

#hash

18:03, 1st July, 2020

Я сделал это путем рендеринга формы, которая автоматически публикует (используя JavaScript) к нужному удаленному URL - соберите всю информацию, которая вам нужна для публикации в обратной передаче веб-формы, а затем создайте HTML для формы удаленной публикации и верните ее клиенту.

Я построил для этого служебный класс, содержащий удаленный URL и коллекцию пар имя / значение для формы.

Межстраничная публикация будет работать, если вы владеете обеими вовлеченными страницами, но не тогда, когда вам нужно разместить сообщение на другом сайте (PayPal, например).


  Сведения об ответе

9090

18:03, 1st July, 2020

Мне нужно было открыть в том же окне, имея дело с возможными проблемами фрейма с исходной страницы, а затем перенаправить на внешний сайт в коде позади:

Private Sub ExternalRedirector(ByVal externalUrl As String)
    Dim clientRedirectName As String = "ClientExternalRedirect"
    Dim externalRedirectJS As New StringBuilder()

    If Not String.IsNullOrEmpty(externalUrl) Then
        If Not Page.ClientScript.IsStartupScriptRegistered(clientRedirectName) Then
            externalRedirectJS.Append("function CheckWindow() {")
            externalRedirectJS.Append("   if (window.top != window) {")
            externalRedirectJS.Append("       window.top.location = '")
            externalRedirectJS.Append(externalUrl)
            externalRedirectJS.Append("';")
            externalRedirectJS.Append("       return false;")
            externalRedirectJS.Append("   }")
            externalRedirectJS.Append("   else {")
            externalRedirectJS.Append("   window.location = '")
            externalRedirectJS.Append(externalUrl)
            externalRedirectJS.Append("';")
            externalRedirectJS.Append("   }")
            externalRedirectJS.Append("}")
            externalRedirectJS.Append("CheckWindow();")

            Page.ClientScript.RegisterStartupScript(Page.GetType(), clientRedirectName, externalRedirectJS.ToString(), True)
        End If
    End If
End Sub


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться