كيفية جعل على Server.Transfer () مع Response.AddHeader ( "التحديث"، "ثواني") وليس الحصول على خطأ 404؟

StackOverflow https://stackoverflow.com/questions/2456243

سؤال

وهكذا هذا هو السيناريو:

ولدي الفئة الأساسية لكافة الصفحات التي تسيطر عليها تسجيل الدخول:

public class SessionControlledPage : Page
{
    protected virtual void Page_Load(Object sender, EventArgs e)
    {
        Response.AddHeader("Refresh", Convert.ToString(Session.Timeout * 60 + 5));
        if (Session.IsNewSession)
        {
            Response.Redirect("~/login.aspx");
        }
    }
}

وصفحة regularpage.aspx أن inherints من الفئة الأساسية:

public partial class RegularPage : SessionControlledPage
{
    override protected void Page_Load(Object sender, EventArgs e)
    {
        base.Page_Load(sender, e);

        Server.Transfer("~/otherpage.aspx");
    }
}

والآن يقولون دعونا كان URL الأصلي HTTP: //localhost/regularpage.aspx و أن Session.Timeout = 5. تظهر المشكلة عندما يحدث التحديث بعد يأخذ نقل مكان. انني اتلقى خطأ 404 Not Found وتغيير URL لل HTTP: // المضيف المحلي / 305 . لاحظ أن 5 * 60 + 5 = 305.

هل تعرف لماذا يحدث هذا؟ حصلت على الحل؟

وPD: أنا استخدم نقل لأنني في حاجة للوصول إلى بعض خصائص regularpage.aspx على otherpage.aspx، ربما كنت قادرا على تقديم حل آخر لهذا أيضا

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

المحلول

وهناك سبب وجيه جدا لbase.Page_Load الدعوة إذا كان كل ما كنت تنوي القيام به بعد ذلك يتم الاتصال على Server.Transfer. ما الذي تحاول تنفيذه تحديدا؟ إذا كنت مجرد الحصول على بعض الخصائص التي تحتاج إلى المجرد هذا في بعض منطق الأعمال التي لا تعتمد على الكائن الصفحة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top