Como eu posto e, em seguida, redirecionar para uma URL externa de ASP.Net?

votos
27

controles do lado do servidor ASP.NET postback para a sua própria página. Isso faz com que os casos em que você deseja redirecionar o usuário para uma página externa, mas precisa postar a essa página por algum motivo (para autenticação, por exemplo) uma dor.

Um HttpWebRequestfunciona muito bem se você não quer redirecionar e JavaScript é bom em alguns casos, mas pode ficar complicado se você realmente precisa do código do lado do servidor para obter os dados em conjunto para o cargo.

Então, como você tanto postar uma URL externa e redirecionar o usuário para o resultado do seu código codebehind ASP.NET?

Publicado 07/08/2008 em 20:13
fonte usuário
Em outras línguas...                            


6 respostas

votos
9

Aqui é que eu resolver este problema hoje. Comecei a partir deste artigo em C # Corner, mas não encontrou o exemplo - enquanto tecnicamente sólida - um pouco incompleto. Tudo o que ele disse estava certo, mas eu precisava para bater alguns sites externos a peça isso juntos para trabalhar exatamente como eu queria.

Não ajudou que o usuário não foi tecnicamente envio de um formulário em tudo; eles estavam clicar em um link para ir para o nosso centro de apoio, mas para registrá-los em um post http tiveram que ser feitas para o site do centro de suporte.

Esta solução envolve o uso de HttpContext.Current.Response.Write () para gravar os dados do formulário, em seguida, usando um pouco de Javascript no

<body onload=""> 

método para enviar o formulário para a URL correta.

Quando o usuário clica no link Centro de Suporte, o seguinte método é chamado para escrever a resposta e redirecionar o usuário:

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>");
}

A chave para este método é que pouco onload de Javascript, que, quando o corpo da página carregar, envia o formulário e, em seguida, redireciona o usuário de volta à minha própria home page. A razão para isso pouco de hoodoo é que eu estou lançando o site externo em uma nova janela, mas não quer que o usuário envie novamente o formulário oculto se atualizar a página. Além disso, essa forma oculta empurrou a página para baixo alguns pixels que me irritou.

Eu estaria muito interessado em quaisquer ideias mais limpas ninguém tem sobre este.

Eric Sipple

Respondeu 07/08/2008 em 20:36
fonte usuário

votos
4

Eu comecei com este exemplo de CodeProject

Em seguida, em vez de adicionar à página, eu emprestado de saalon (acima) e fez um Response.Write ().

Respondeu 21/01/2010 em 20:23
fonte usuário

votos
2

Eu faria o post de formulário em seu código por trás usando HttpWebRequest classe. Aqui está uma boa classe auxiliar para obter o seu início:

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

A partir daí, você pode apenas fazer um Response.Redirect, ou talvez você precisa variar a sua acção com base no resultado do poste (se houve um erro, exibi-lo para o usuário ou qualquer outro). Acho que você já tinha a resposta na sua pergunta para ser honesto - soa como você pensa que é um post ou redirecionar quando na realidade você pode fazê-los tanto do seu código por trás.

Respondeu 08/08/2008 em 04:25
fonte usuário

votos
1

I necessário para abrir na mesma janela, lidar com possíveis problemas de frame da página original, em seguida, redirecionando para um site externo no código por trás:

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
Respondeu 27/08/2013 em 19:55
fonte usuário

votos
1

Eu tenho feito isso, tornando uma forma que auto-posts (usando JavaScript) para o URL remoto desejado - reunir todas as informações que você precisa para o cargo na postagem do formulário web e, em seguida, construir o HTML para a forma remota-posting e torná-lo de volta para o cliente.

Eu construí uma classe de utilitário para este que contém o URL remoto e uma coleção de pares nome / valor para o formulário.

Postagem entre páginas irá funcionar se você possui ambas as páginas envolvidas, mas não se você precisa postar para outro local (PayPal, por exemplo).

Respondeu 07/08/2008 em 20:20
fonte usuário

votos
1

Se você estiver usando ASP.NET 2.0, você pode fazer isso com postagem entre páginas .

Edit: eu perdi o fato de que você está perguntando sobre uma externo página. Por que eu acho que você precisa ter sua página ASP.NET gen um formulário HTML cuja ação está definido para o URL remoto e método é definido como POST. (Usando postagem entre páginas, isso poderia até ser uma página diferente sem UI, elementos de forma única escondidos.) Em seguida, adicione um pouco de javascript para enviar o formulário, assim que o resultado postagem foi recebida no cliente.

Respondeu 07/08/2008 em 20:17
fonte usuário

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