سؤال

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

أنا أستخدم الكود التالي:

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());

هذا لا يعمل رغم ذلك.كان افتراضي أن ASP.NET سيحل عنوان URL تلقائيًا إلى المسار الصحيح.عادة، وأود أن مجرد استخدام

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());

لكن هذا الرمز موجود على صفحة رئيسية، ويمكن تنفيذه من أي مستوى مجلد.كيف يمكنني التغلب على هذه المشكلة؟

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

المحلول

أعتقد أنك بحاجة إلى إسقاط "~/" واستبدالها بـ "/" فقط، وأعتقد أن / هو الجذر

توقف هناك! :-) إلا إذا كنت تريد ترميز تطبيق الويب الخاص بك بحيث لا يمكن تثبيته إلا على جذر موقع الويب.

"~/" يكون الشيء الصحيح الذي يجب استخدامه، ولكن السبب وراء عدم عمل الكود الأصلي كما هو متوقع هو ذلك ResolveUrl (والذي يستخدم داخليا من قبل Redirect) يحاول أولاً معرفة ما إذا كان المسار الذي تمرره هو عنوان URL مطلق (على سبيل المثال"**http://الخادم/**foo/bar.htm" بدلاً من "foo/bar.htm") - ولكن للأسف يقوم بذلك ببساطة عن طريق البحث عن حرف النقطتين ':' في عنوان URL الذي تقدمه له.ولكن في هذه الحالة، يتم العثور على نقطتين في عنوان URL الذي تقدمه في ملف ReturnPath قيمة سلسلة الاستعلام، والتي تخدعها - لذلك لم يتم حل '~/' الخاصة بك.

الحل هو أنه يجب عليك ترميز عنوان URL لملف ReturnPath القيمة التي تفلت من المشكلة ':' بالإضافة إلى أي أحرف خاصة أخرى.

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));

بالإضافة إلى ذلك، أوصي بعدم استخدامك (أو أي شخص) أبدًا Uri.ToString - لأنه يوفر نسخة سهلة القراءة وأكثر "ملاءمة" لعنوان URL - وليست نسخة صحيحة بالضرورة (فهي لا تفلت من الأشياء).بدلاً من ذلك استخدم Uri.AbsoluteUri - هكذا:

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));

نصائح أخرى

يمكنك حل عنوان URL First Response.redirect ("~/login.aspx) ؛وإضافة المعلمات بعد حلها.

ماذا عن استخدام

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top