Di ASP.NET MVC, Anda dapat mengembalikan ActionResult dengan cukup mudah:
return RedirectToAction("Index");
or
return RedirectToRoute(new { controller = "home", version = Math.Random() * 10 });
Ini sebenarnya akan memberikan pengalihan HTTP, yang biasanya baik-baik saja. Namun, ketika menggunakan google analytics, hal ini menyebabkan masalah besar karena perujuk asli hilang sehingga google tidak tahu dari mana Anda berasal. Ini akan menghilangkan informasi berguna seperti istilah mesin pencari.
Sebagai catatan tambahan, metode ini memiliki keuntungan untuk menghapus semua parameter yang mungkin berasal dari kampanye tetapi masih memungkinkan saya untuk menangkapnya dari sisi server. Membiarkannya dalam string kueri mengarahkan orang ke bookmark atau twitter atau blog link yang seharusnya tidak mereka lakukan. Saya telah melihat ini beberapa kali ketika orang-orang menge-tweet tautan ke situs kami yang berisi ID kampanye.
Bagaimanapun, saya menulis pengontrol 'gerbang' untuk semua kunjungan masuk ke situs yang dapat saya arahkan ke tempat yang berbeda atau versi alternatif.
Untuk saat ini saya lebih peduli tentang Google untuk saat ini (daripada bookmark yang tidak disengaja), dan saya ingin dapat mengirim seseorang yang mengunjungi /
ke halaman yang akan mereka dapatkan jika mereka membukanya /home/7
, yang merupakan versi 7 dari sebuah beranda.
Seperti yang saya katakan sebelumnya Jika saya melakukan ini, saya kehilangan kemampuan google untuk menganalisis perujuk:
return RedirectToAction(new { controller = "home", version = 7 });
Yang saya inginkan adalah a
return ServerTransferAction(new { controller = "home", version = 7 });
yang akan memberi saya tampilan tersebut tanpa pengalihan sisi klien. Saya tidak berpikir hal seperti itu ada.
Saat ini hal terbaik yang dapat saya hasilkan adalah menduplikasi seluruh logika pengontrol HomeController.Index(..)
dalam GatewayController.Index
Tindakan saya . Ini berarti saya harus pindah 'Views/Home'
ke 'Shared'
jadi itu dapat diakses. Pasti ada cara yang lebih baik ?? ..
if
pernyataan sederhana terlalu menggoda solusi.
RouteBase
sehingga Anda dapat meletakkan if
pernyataan Anda di sana alih-alih membengkokkan semuanya ke belakang untuk melompat dari satu pengontrol ke pengontrol lainnya?
ServerTransferAction
yang coba Anda tiru? Apakah itu hal yang nyata? (tidak dapat menemukan info apa pun tentang itu ... terima kasih atas pertanyaannya, btw, jawaban di bawah ini luar biasa)