Подтвердить что ты не робот

Как отправить сообщение, а затем перенаправить внешний URL из ASP.Net?

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

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

Итак, как вы оба отправляете на внешний URL-адрес и перенаправляете пользователя на результат из кода кода ASP.NET?

4b9b3361

Ответ 1

Вот как я решил эту проблему сегодня. Я начал с этой статьи о С# 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>");
}

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

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

Эрик Сиппл

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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