Vra

ASP.NET bediener-kant kontrole posterug om hul eie bladsy.Dit maak gevalle waar jy wil om te lei'n gebruiker aan'n eksterne bladsy, maar nodig het om te pos aan die bladsy vir een of ander rede (vir verifikasie, byvoorbeeld) 'n pyn.

'n HttpWebRequest werk baie goed as jy nie wil hê om te lei, en JavaScript is'n boete in sommige gevalle, maar kan lastig wees as jy regtig nie nodig het om die bediener-kant-kode te kry om die data saam vir die pos.

So hoe doen jy beide pos aan'n eksterne URL en lei die gebruiker na die resultaat van jou ASP.NET codebehind kode?

Was dit nuttig?

Oplossing

Hier se ek het hierdie probleem opgelos vandag.Ek het begin van die hierdie artikel op C# Hoek, maar het gevind dat die voorbeeld - terwyl tegnies klank - 'n bietjie onvolledig.Alles wat hy gesê het, is reg, maar ek nodig het om te tref'n paar eksterne webwerwe te stukkie saam te werk presies soos ek dit wou hê.

Dit het nie gehelp dat die gebruiker is nie tegnies die indiening van'n vorm op alle;hulle was te kliek op'n skakel om te gaan na ons ondersteuning sentrum, maar om aan te meld hulle in'n http post gemaak moes word om die ondersteuning sentrum se webwerf.

Hierdie oplossing behels die gebruik van HttpContext.Huidige.Reaksie.Skryf() skryf die data vir die vorm, dan met behulp van'n bietjie van Javascript op die

<body onload=""> 

metode te stuur die vorm aan die korrekte URL.

Wanneer die gebruiker op die Ondersteuning Sentrum skakel, kan die volgende metode is geroep om te skryf die reaksie en lei die gebruiker:

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

Die sleutel tot hierdie metode is in die onload bietjie van Javascript, wat , wanneer die liggaam van die bladsy laai, lê die vorm en dan lei die gebruiker terug na my eie Huis bladsy.Die rede vir die wat bietjie van hoodoo is dat ek die aanvang van die eksterne werf in'n nuwe venster, maar wil nie die gebruiker te stuur die verborge vorm as hulle die bladsy te verfris.Plus wat verborge vorm stoot die bladsy af'n paar pixels wat het op my senuwees.

Ek sou baie belangstel in enige skoonmaker idees iemand het op hierdie een.

Eric Sipple

Ander wenke

Ek het begin met hierdie voorbeeld van CodeProject

Toe in plaas van die toevoeging van die bladsy, ek geleen van saalon (bo) en het 'n Response.Write ().

Ek sou die vorm post in jou kode te doen agter die gebruik van HttpWebRequest klas. Hier is 'n goeie helper klas te kry jou begin:

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

Van daar, jy kan net doen 'n Response.Redirect, of miskien moet jy jou optrede wissel gebaseer op die uitkoms van die post (indien daar 'n fout was, vertoon dit na die gebruiker of wat ook al). Ek dink jy het reeds die antwoord in jou vraag om eerlik te wees het -. Klink asof jy dink dit is 'n pos of te lei wanneer dit in werklikheid kan jy dit doen beide van jou kode agter

Ek het dit gedoen deur die lewering van 'n vorm wat outomaties poste (met behulp van JavaScript) om die gewenste afgeleë URL - versamel enige inligting wat jy nodig het vir die pos in postback die web vorm en dan bou die HTML vir die remote-posvorm en maak dit terug na die kliënt.

Ek het 'n nut klas vir hierdie dat die afgeleë URL en 'n versameling van naam / waarde pare vir die vorm bevat.

Cross-bladsy gepos sal werk indien jy beide van die betrokke bladsye besit, maar nie as jy nodig het om te post na 'n ander webwerf (PayPal, byvoorbeeld).

As jy 'ASP.NET 2.0, jy kan dit doen met kruis-bladsy gepos .

Edit: Ek mis die feit dat jy vra oor 'n eksterne bladsy. Vir wat dink ek jy nodig het om jou ASP.NET bladsy gen van 'n HTML-vorm wie se optrede is ingestel op die afgeleë URL en metode is ingestel op POST het. (Die gebruik van kruis-bladsy plaas, dit kan selfs 'n ander bladsy met geen UI, net weggesteek vorm elemente.) Dan voeg 'n bietjie van javascript om die vorm so gou as die postback gevolg is ontvang op die kliënt in te dien.

Ek moes oopmaak in dieselfde venster, die hantering van moontlike raam kwessies van die oorspronklike blad, dan herlei na 'n eksterne webtuiste in kode agter:

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
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top