मैं ASP.Net से बाहरी URL पर कैसे पोस्ट करूं और फिर रीडायरेक्ट करूं?

ASP.NET सर्वर-साइड अपने स्वयं के पेज पर पोस्टबैक नियंत्रित करता है। इससे ऐसे मामले होते हैं जहां आप किसी उपयोगकर्ता को किसी बाहरी पृष्ठ पर रीडायरेक्ट करना चाहते हैं, लेकिन किसी कारण से (उस प्रमाणीकरण के लिए, उदाहरण के लिए) उस पृष्ठ पर पोस्ट करने की आवश्यकता है।

यदि आप रीडायरेक्ट नहीं करना चाहते हैं तो एक HttpWebRequest बहुत अच्छा काम करता है, और कुछ मामलों में जावास्क्रिप्ट ठीक है, लेकिन यदि आपको वास्तव में पोस्ट के लिए डेटा प्राप्त करने के लिए सर्वर-साइड कोड की आवश्यकता होती है तो मुश्किल हो सकती है ।

तो आप दोनों बाहरी यूआरएल पर कैसे पोस्ट करते हैं और उपयोगकर्ता को अपने एएसपी.NET कोडबेंड कोड से परिणाम के लिए रीडायरेक्ट करते हैं?

0
ro fr bn

6 उत्तर

यहां मैंने आज इस समस्या को हल किया है। मैंने सी # कॉर्नर पर यह आलेख से शुरू किया है, लेकिन उदाहरण मिला - तकनीकी रूप से ध्वनि - थोड़ा अपूर्ण। उन्होंने जो कुछ भी कहा वह सही था, लेकिन मुझे कुछ बाहरी साइटों को मारने की ज़रूरत थी ताकि मैं इसे ठीक से काम करने के लिए एक साथ टुकड़ा कर सकूं।

इससे मदद नहीं मिली कि उपयोगकर्ता तकनीकी रूप से एक फॉर्म सबमिट नहीं कर रहा था; वे हमारे समर्थन केंद्र में जाने के लिए एक लिंक पर क्लिक कर रहे थे, लेकिन उन्हें http पोस्ट में लॉग इन करने के लिए समर्थन केंद्र की साइट पर जाना था।

इस समाधान में फॉर्म के लिए डेटा लिखने के लिए HttpContext.Current.Response.Write() का उपयोग करना शामिल है, फिर थोड़ा जावास्क्रिप्ट का उपयोग करना

<body onload=""> 

उचित यूआरएल में फॉर्म जमा करने की विधि।

जब उपयोगकर्ता समर्थन केंद्र लिंक पर क्लिक करता है, तो प्रतिक्रिया को लिखने और उपयोगकर्ता को रीडायरेक्ट करने के लिए निम्न विधि को कॉल किया जाता है:

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

इस विधि की कुंजी जावास्क्रिप्ट के ऑनलोड बिट में है, जो, जब पृष्ठ का बॉडी लोड होता है, तो फ़ॉर्म सबमिट करता है और फिर उपयोगकर्ता को अपने होम पेज पर रीडायरेक्ट करता है। हुडू के उस बिट का कारण यह है कि मैं बाहरी साइट को एक नई विंडो में लॉन्च कर रहा हूं, लेकिन नहीं चाहता कि उपयोगकर्ता छिपे हुए फॉर्म को फिर से सबमिट कर लेता है यदि वे पृष्ठ को रीफ्रेश करते हैं। इसके अलावा छिपे हुए फॉर्म ने पेज को कुछ पिक्सेल नीचे धकेल दिया जो मेरे नसों पर आ गया।

मुझे इस पर किसी भी क्लीनर विचारों में बहुत दिलचस्पी होगी।

एरिक सिपल

0
जोड़ा

यदि आप ASP.NET 2.0 का उपयोग कर रहे हैं, तो आप इसे क्रॉस-पेज के साथ कर सकते हैं पोस्टिंग।

संपादित करें: मुझे इस तथ्य को याद आया कि आप बाहरी पृष्ठ के बारे में पूछ रहे हैं। इसके लिए मुझे लगता है कि आपको अपने एएसपी.नेट पेज को एक HTML फॉर्म जेन अप करने की आवश्यकता होगी जिसका कार्य रिमोट यूआरएल पर सेट है और विधि POST पर सेट है। (क्रॉस-पेज पोस्टिंग का उपयोग करके, यह यूआई के साथ एक अलग पृष्ठ भी हो सकता है, केवल छुपा फॉर्म तत्व।) फिर क्लाइंट पर पोस्टबैक परिणाम प्राप्त होने के तुरंत बाद फॉर्म सबमिट करने के लिए जावास्क्रिप्ट का थोड़ा सा जोड़ें।

0
जोड़ा

मैंने वांछित रिमोट यूआरएल में ऑटो-पोस्ट (जावास्क्रिप्ट का उपयोग करके) एक फॉर्म प्रस्तुत करके ऐसा किया है - वेब फॉर्म के पोस्टबैक में पोस्ट के लिए आपको जो भी जानकारी चाहिए उसे इकट्ठा करें और फिर रिमोट-पोस्टिंग फॉर्म के लिए HTML बनाएं और इसे वापस प्रस्तुत करें ग्राहक के लिए।

मैंने इसके लिए एक यूटिलिटी क्लास बनाया जिसमें रिमोट यूआरएल और फॉर्म के लिए नाम / वैल्यू जोड़े का संग्रह शामिल है।

क्रॉस-पेज पोस्टिंग काम करेगी यदि आपके पास दोनों पेज शामिल हैं, लेकिन यदि आपको किसी अन्य साइट पर पोस्ट करने की आवश्यकता नहीं है (उदाहरण के लिए पेपैल)।

0
जोड़ा

मैं HttpWebRequest क्लास का उपयोग कर अपने कोड में फॉर्म पोस्ट करूंगा। अपनी शुरुआत करने के लिए यहां एक अच्छी सहायक कक्षा है:

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

वहां से, आप केवल एक प्रतिक्रिया दे सकते हैं। रेडियोधर्मी, या शायद आपको पोस्ट के नतीजे के आधार पर अपनी कार्रवाई को अलग करने की आवश्यकता है (यदि कोई त्रुटि हुई है, तो उसे उपयोगकर्ता या जो कुछ भी प्रदर्शित करें)। मुझे लगता है कि आपके पास पहले से ही आपके प्रश्न में ईमानदार होने का जवाब था - लगता है जैसे आपको लगता है कि यह एक पोस्ट है या वास्तविकता में रीडायरेक्ट करते समय आप उन्हें अपने कोड से दोनों कर सकते हैं।

0
जोड़ा

I started with this example from CodeProject

फिर पेज को जोड़ने के बजाय, मैंने सैलॉन (ऊपर) से उधार लिया और एक Response.Write() किया।

0
जोड़ा

मुझे उसी विंडो में खोलने की जरूरत है, मूल पृष्ठ से संभव फ्रेम मुद्दों से निपटने, फिर पीछे कोड में बाहरी साइट पर रीडायरेक्ट करना:

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
जोड़ा