ใน ASP.NET MVC คุณสามารถส่งคืน ActionResult เปลี่ยนเส้นทางได้อย่างง่ายดาย:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
สิ่งนี้จะให้การเปลี่ยนเส้นทาง HTTP ซึ่งปกติจะใช้ได้ อย่างไรก็ตามเมื่อใช้การวิเคราะห์ของ Google สิ่งนี้ทำให้เกิดปัญหาใหญ่เนื่องจากผู้อ้างอิงดั้งเดิมหายไป Google จึงไม่ทราบว่าคุณมาจากไหน ซึ่งจะสูญเสียข้อมูลที่เป็นประโยชน์เช่นคำศัพท์ของเครื่องมือค้นหา
หมายเหตุด้านข้างวิธีนี้มีข้อดีในการลบพารามิเตอร์ใด ๆ ที่อาจมาจากแคมเปญ แต่ยังช่วยให้ฉันสามารถจับภาพทางฝั่งเซิร์ฟเวอร์ได้ การปล่อยทิ้งไว้ในสตริงข้อความค้นหาจะทำให้มีคนบุ๊กมาร์กหรือทวิตเตอร์หรือบล็อกลิงก์ที่ไม่ควรทำ ฉันเคยเห็นสิ่งนี้หลายครั้งที่ผู้คนได้เปลี่ยนลิงก์ไปยังไซต์ของเราที่มีรหัสแคมเปญ
อย่างไรก็ตามฉันกำลังเขียนตัวควบคุม 'เกตเวย์' สำหรับการเข้าชมไซต์ที่เข้ามาทั้งหมดซึ่งฉันอาจเปลี่ยนเส้นทางไปยังสถานที่อื่นหรือเวอร์ชันอื่น
ตอนนี้ฉันสนใจ Google มากขึ้นในตอนนี้ (มากกว่าการบุ๊กมาร์กโดยไม่ตั้งใจ) และฉันต้องการส่งคนที่เยี่ยมชม/
ไปยังหน้าที่พวกเขาจะได้รับหากพวกเขาไป/home/7
ซึ่งเป็นหน้าแรกเวอร์ชัน 7
อย่างที่ฉันเคยพูดไปแล้วถ้าฉันทำสิ่งนี้ฉันจะสูญเสียความสามารถในการวิเคราะห์ผู้อ้างอิงของ Google:
return RedirectToAction(new { controller = "home", version = 7 });
สิ่งที่ฉันต้องการจริงๆคือไฟล์
return ServerTransferAction(new { controller = "home", version = 7 });
ซึ่งจะทำให้ฉันได้รับมุมมองนั้นโดยไม่มีการเปลี่ยนเส้นทางฝั่งไคลเอ็นต์ ฉันไม่คิดว่าจะมีสิ่งนี้อยู่จริง
ขณะนี้สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือการทำซ้ำตรรกะคอนโทรลเลอร์ทั้งหมดสำหรับHomeController.Index(..)
ในGatewayController.Index
Action ของฉัน ซึ่งหมายความว่าฉันต้องย้าย'Views/Home'
เข้าไป'Shared'
จึงจะสามารถเข้าถึงได้ ต้องมีวิธีที่ดีกว่านี้ ?? ..
if
คำพูดง่ายๆก็เป็นวิธีแก้ปัญหาที่น่าดึงดูดเกินไป
RouteBase
เพื่อให้คุณสามารถวางif
คำสั่งของคุณไว้ที่นั่นแทนที่จะงอทุกอย่างไปข้างหลังเพื่อข้ามจากคอนโทรลเลอร์หนึ่งไปยังอีกตัวหนึ่ง?
ServerTransferAction
ที่คุณพยายามทำซ้ำคืออะไร? นั่นคือสิ่งที่เกิดขึ้นจริงหรือ? (ไม่พบข้อมูลใด ๆ เลย ... ขอบคุณสำหรับคำถาม btw คำตอบด้านล่างสุดยอดมาก)