호출 - javascript:__ dopostback




게시하고 ASP.Net의 외부 URL로 리디렉션하는 방법은 무엇입니까? (4)

ASP.NET 서버 측 컨트롤이 자신의 페이지에 대한 포스트 백을 제어합니다. 이렇게하면 사용자를 외부 페이지로 리디렉션하려고하지만 인증 (예 : 인증)을 위해 그 페이지에 게시해야하는 경우가 있습니다.

리디렉션을 원하지 않는다면 HttpWebRequest 가 훌륭하게 작동하지만 JavaScript는 경우에 따라 문제가 없지만 게시 용 데이터를 얻기 위해 서버 측 코드가 실제로 필요한 경우 까다로워 질 수 있습니다.

그렇다면 외부 URL에 게시하고 ASP.NET 코드 숨김 코드의 결과로 사용자를 리디렉션하는 방법은 무엇입니까?


ASP.NET 2.0을 사용하는 경우 크로스 페이지 게시 로이 작업을 수행 할 수 있습니다.

편집 : 나는 당신이 외부 페이지에 대해 묻고 있다는 사실을 놓쳤다. 이를 위해 ASP.NET 페이지 gen을 HTML 양식으로 만들어야하는데,이 HTML 양식의 작업은 원격 URL로 설정되고 메서드는 POST로 설정됩니다. (교차 페이지 게시를 사용하면 UI가없는 다른 페이지 일 수도 있고 숨겨진 양식 요소 일 수도 있습니다.) 그런 다음 클라이언트에서 다시 게시 결과를 받자 마자 양식을 제출하기 위해 약간의 자바 스크립트를 추가하십시오.


오늘 저는이 문제를 오늘 풀었습니다. 이 기사 에서 C # 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의 onload 비트인데, 페이지의 본문이로드되면 양식을 제출 한 다음 사용자를 다시 내 자신의 홈 페이지로 리디렉션합니다. hoodoo에 대한 이유는 새 창에서 외부 사이트를 시작하지만 사용자가 페이지를 새로 고치면 숨겨진 양식을 다시 제출하지 않기 위해서입니다. 게다가 그 숨겨진 양식은 내 신경에 닿은 몇 픽셀 아래로 페이지를 밀었습니다.

나는이 아이디어에 대해 누구나 가지고있는 더 깨끗한 아이디어에 매우 관심이 있습니다.

에릭 시플


나는 당신의 코드에서 HttpWebRequest 클래스를 사용하여 폼 포스트를 할 것이다. 다음은 시작하기 좋은 도우미 클래스입니다.

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

거기에서 Response.Redirect를 수행하거나 게시물의 결과에 따라 조치를 변경해야합니다 (오류가있는 경우 사용자에게 표시하는 등). 나는 당신이 이미 당신의 질문에 솔직히 대답했다고 생각합니다. 실제로 당신이 코드 뒤에서 그것들을 둘 다 할 수있을 때 당신이 그것이 포스트라고 생각하는 것과 같은 소리를냅니다.


같은 창에서 열어야 할 원본 페이지의 가능한 프레임 문제를 처리 한 다음 코드 숨김 외부 사이트로 리디렉션해야했습니다.

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




postback