Cum pot posta și apoi redirecționa către o adresă URL externă din ASP.Net?

Serverul ASP.NET controlează postback-ul pe pagina proprie. Acest lucru face cazurile în care doriți să redirecționați un utilizator la o pagină externă, dar trebuie să postați pe acea pagină din anumite motive (de exemplu, pentru autentificare) o durere.

Un HttpWebRequest funcționează excelent dacă nu doriți să redirecționați, iar JavaScript este bine în unele cazuri, dar poate fi dificil dacă aveți într-adevăr nevoie de codul de pe server pentru a obține datele împreună pentru post .

Deci, cum puteți să postați la o adresă URL externă și să redirecționați utilizatorul la rezultatul codului ASP.NET codebehind?

0
fr hi bn

6 răspunsuri

Iată că am rezolvat această problemă astăzi. Am început de la acest articol pe C# Corner, dar a găsit exemplul - în timp ce din punct de vedere tehnic sunet - puțin incomplet. Tot ce a spus a avut dreptate, dar a trebuit sa lovesc cateva site-uri externe pentru a face acest lucru impreuna pentru a lucra exact asa cum vroiam.

Nu a contribuit la faptul că utilizatorul nu a prezentat tehnic un formular; ei făceau clic pe un link pentru a merge la centrul nostru de asistență, dar să le înregistreze într-un post http a trebuit să fie făcute pe site-ul centrului de asistență.

Această soluție implică utilizarea HttpContext.Current.Response.Write() pentru a scrie datele pentru formular, apoi folosind un pic de Javascript pe

<body onload=""> 

metoda de a trimite formularul la adresa URL corectă.

Când utilizatorul face clic pe link-ul Centrului de asistență, se apelează următoarea metodă pentru a scrie răspunsul și a redirecționa utilizatorul:

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

Cheia acestei metode constă în bitul de încărcare a Javascript, care, atunci când corpul paginii se încarcă, trimite formularul și apoi redirecționează utilizatorul înapoi la propria pagină de pornire. Motivul pentru acest bit de hoodoo este că lansez site-ul extern într-o fereastră nouă, dar nu vreau ca utilizatorul să retrimită formularul ascuns în cazul în care actualizează pagina. În plus, acea formă ascunsă a împins pagina în jos cu câțiva pixeli care mi-au luat nervii.

Aș fi foarte interesat de orice idee mai curată pe care o are cineva despre asta.

Eric Sipple

0
adăugat

Dacă utilizați ASP.NET 2.0, puteți face acest lucru cu pagină întreagă postarea .

Editați: Mi-a ratat faptul că întrebați o pagină externă . Pentru asta, cred că ar trebui să aveți pagina dvs. ASP.NET gen într-o formă HTML a cărei acțiune este setată la adresa URL de la distanță și metoda este setată la POST. (Folosind postarea între pagini, aceasta ar putea fi chiar o pagină diferită fără UI, numai elemente de formă ascunse.) Apoi adăugați un pic de JavaScript pentru a trimite formularul de îndată ce rezultatul postback a fost primit pe client.

0
adăugat

Am facut acest lucru prin redactarea unui formular care postuleaza automat (folosind JavaScript) adresa URL dorita de la distanta - aduna orice informatie de care ai nevoie pentru postare in postback-ul formularului web si apoi construiesc HTML-ul pentru formularul de postare la distanta si reda-l inapoi la client.

Am construit o clasă utilitară pentru aceasta, care conține adresa URL la distanță și o colecție de perechi de nume / valoare pentru formular.

Publicarea pe pagină va funcționa dacă dețineți ambele pagini implicate, dar nu și dacă trebuie să postați pe un alt site (de exemplu, PayPal).

0
adăugat

Aș face postul de formular în codul dvs. din spatele utilizării clasei HttpWebRequest. Aici este o clasă bună de ajutor pentru a vă începe:

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

De acolo, puteți face doar o Response.Redirect, sau poate aveți nevoie să vă modificați acțiunea în funcție de rezultatul postării (dacă a existat o eroare, afișați-o utilizatorului sau altceva). Cred că ați avut deja răspunsul în întrebarea dvs. pentru a fi cinstit - sună ca și cum credeți că este un mesaj sau o redirecționare atunci când, în realitate, puteți să le folosiți atât de codul din spatele lor.

0
adăugat

I started with this example from CodeProject

Apoi, în loc de a adăuga la pagină, am împrumutat de la saalon (de mai sus) și am făcut o Response.Write ().

0
adăugat

Aveam nevoie să deschid în aceeași fereastră, să trateze posibilele probleme ale cadrelor din pagina originală, apoi să redirecționez către un site extern în cod în spatele:

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
0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com