سؤال

ASP.NET من جانب الخادم ضوابط إعادة النشر على الصفحة الخاصة بهم.وهذا يجعل من الحالات حيث تريد إعادة توجيه المستخدم إلى صفحة خارجية ، ولكن تحتاج إلى ما بعد إلى تلك الصفحة لسبب ما (على المصادقة على سبيل المثال) الألم.

وهو HttpWebRequest يعمل كبيرة إذا كنت لا ترغب في إعادة توجيه ، و جافا سكريبت على ما يرام في بعض الحالات, ولكن يمكن الحصول على صعبة إذا كنت حقا في حاجة إلى تعليمات برمجية من جانب الخادم للحصول على البيانات معا من أجل المنصب.

لذا كيف يمكنك أن كل مشاركة خارجية URL إعادة توجيه المستخدم إلى نتيجة من ASP.NET codebehind الرمز ؟

هل كانت مفيدة؟

المحلول

هنا أنا حل هذه المشكلة اليوم.بدأت من هذه المادة على C# الزاوية ، ولكن وجدت سبيل المثال - حين سليمة من الناحية الفنية - غير مكتملة.كل ما قاله كان صحيحا ولكن أنا في حاجة إلى ضرب عدد قليل من المواقع الخارجية لقطعة معا إلى العمل بالضبط كما أردت.

لم يساعد المستخدم لم يكن من الناحية الفنية تقديم النموذج في كل شيء ؛ كانوا النقر على الرابط للذهاب إلى مركز الدعم ، ولكن سجل لهم في ما بعد http أن يكون مركز دعم الموقع.

هذا الحل ينطوي على استخدام HttpContext.الحالي.استجابة.كتابة() كتابة البيانات على النموذج ، ثم باستخدام قليلا من جافا سكريبت على

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

مفتاح هذه الطريقة في أن onload قليلا من جافا سكريبت ، والتي عند الجسم من تحميل الصفحة ، النموذج ومن ثم إعادة توجيه المستخدم إلى الصفحة الرئيسية.والسبب في أن قليلا من الشؤم هو أنني إطلاق موقع خارجي في نافذة جديدة, ولكن لا تريد المستخدم أن يعيد شكل خفي إذا كانوا تحديث الصفحة.بالإضافة إلى أن شكل خفي دفعت الصفحة أسفل بضع بكسل التي حصلت على أعصابي.

سأكون مهتما جدا في أي منظف أفكار أي شخص لديه على هذا واحد.

إريك Sipple

نصائح أخرى

لقد بدأت مع هذا المثال من CodeProject

ثم بدلا من إضافة إلى الصفحة ، اقترضت من saalon (أعلاه) ولم استجابة.الكتابة().

وأود أن تفعل شكل بعد في التعليمات البرمجية الخاصة بك وراء استخدام class.هنا هو مساعد جيد فئة للبدء الخاص بك:

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

من هناك, يمكنك أن تفعل مجرد استجابة.إعادة توجيه ، أو ربما كنت بحاجة إلى تغيير إجراءات بناء على نتائج آخر (إذا كان هناك خطأ, عرض إلى المستخدم أو أيا كان).أعتقد أنك بالفعل الجواب في سؤالك أن نكون صادقين - يبدو أنك تعتقد أنها وظيفة أو إعادة توجيه عندما في الواقع يمكنك القيام بها سواء من التعليمات البرمجية خلف.

وقد فعلت ذلك من خلال تقديم نموذج لصناعة السيارات في وظيفة (باستخدام جافا سكريبت) المطلوب remote URL - جمع كل المعلومات التي كنت بحاجة للحصول على وظيفة في "نموذج ويب" هو إعادة النشر ومن ثم بناء HTML عن بعد-نشر شكل وجعلها مرة أخرى إلى العميل.

لقد بنيت أداة الطبقة التي تحتوي على جهاز التحكم عن بعد URL مجموعة من أزواج الاسم/القيمة على شكل.

عبر الصفحة نشر العمل إذا كنت تملك كل الصفحات المعنية ، ولكن ليس إذا كنت بحاجة إلى إضافة إلى موقع آخر (باي بال ، على سبيل المثال).

إذا كنت تستخدم ASP.NET 2.0, يمكنك أن تفعل هذا مع عبر نشر الصفحة.

تحرير:اشتقت حقيقة أن كنت تسأل عن الخارجية الصفحة.لهذا أعتقد أنك تحتاج أن يكون لديك ASP.NET الصفحة gen تصل نموذج HTML التي يتم تعيين العمل عن بعد URL تعيين أسلوب إلى آخر.(عبر الصفحة نشر هذا يمكن أن يكون حتى صفحة مختلفة مع عدم وجود واجهة المستخدم فقط خفية عناصر النموذج.) ثم يضاف قليلا من جافا سكريبت لإرسال النموذج بمجرد إعادة النشر النتيجة كانت تلقى على العميل.

أنا في حاجة إلى تفتح في نفس النافذة ، والتعامل مع إطار الممكن القضايا من الصفحة الأصلية ، ثم إعادة توجيه إلى موقع خارجي في التعليمات البرمجية خلف:

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top