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

голоса
27

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

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

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

Задан 07/08/2008 в 20:13
источник пользователем
На других языках...                            


6 ответов

голоса
9

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

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

Это решение включает в себя использование 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, который, когда тело загрузки страницы, отправляет форму, а затем перенаправляет пользователя на моей домашней странице. Причина этого бита порчи является то, что я запускать внешний сайт в новом окне, но не хочу, чтобы пользователь повторно скрытую форму, если они обновите страницу. Кроме того, что скрытая форма толкнул страницу вниз несколько пикселей, попавших мне на нервы.

Я был бы очень заинтересован в любых чистых идеях кто имеет на это.

Эрик Сиппл

Ответил 07/08/2008 в 20:36
источник пользователем

голоса
4

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

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

Ответил 21/01/2010 в 20:23
источник пользователем

голоса
2

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

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

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

Ответил 08/08/2008 в 04:25
источник пользователем

голоса
1

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

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
Ответил 27/08/2013 в 19:55
источник пользователем

голоса
1

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

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

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

Ответил 07/08/2008 в 20:20
источник пользователем

голоса
1

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

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

Ответил 07/08/2008 в 20:17
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more