Saat Anda memanggil RedirectToAction
dalam pengontrol, pengalihan secara otomatis menggunakan HTTP GET. Bagaimana saya secara eksplisit mengatakannya untuk menggunakan HTTP POST?
Saya memiliki tindakan yang menerima permintaan GET dan POST, dan saya ingin dapat RedirectToAction
menggunakan POST dan mengirimkannya beberapa nilai.
Seperti ini:
this.RedirectToAction(
"actionname",
new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);
Saya ingin someValue
dan anotherValue
nilai dikirim menggunakan HTTP POST bukan GET. Adakah yang tahu bagaimana melakukan ini?
asp.net-mvc
url-redirection
Chris Pietschmann
sumber
sumber
Jawaban:
HTTP tidak mendukung pengalihan ke halaman menggunakan POST. Saat Anda mengarahkan ulang suatu tempat, tajuk "Lokasi" HTTP memberi tahu peramban ke mana harus pergi, dan peramban membuat permintaan GET untuk laman itu. Anda mungkin harus menulis kode untuk halaman Anda untuk menerima permintaan GET serta permintaan POST.
sumber
Sebagai contoh khusus Anda, saya hanya akan melakukan ini, karena Anda jelas tidak peduli tentang bagaimana sebenarnya peramban mendapatkan pengalihan (berdasarkan menerima jawaban yang telah Anda terima):
Itu bekerja dengan mudah dan tidak ada bisnis lucu yang benar-benar terjadi - ini memungkinkan Anda untuk mempertahankan fakta bahwa yang kedua benar-benar hanya menerima permintaan HTTP POST (kecuali dalam hal ini, yang tetap berada di bawah kendali Anda) dan Anda tidak perlu gunakan TempData, yang disarankan oleh tautan yang Anda poskan di jawaban.
Saya ingin tahu apa yang "salah" dengan ini, jika ada sesuatu. Jelas, jika Anda ingin benar-benar mengirim pengalihan ke peramban, ini tidak akan berfungsi, tetapi kemudian Anda harus bertanya mengapa Anda mencoba mengonversi itu terlepas, karena sepertinya aneh bagi saya.
Semoga itu bisa membantu.
sumber
Jika Anda ingin meneruskan data antara dua tindakan selama pengalihan tanpa menyertakan data apa pun dalam string kueri, masukkan model ke objek TempData.
TINDAKAN
TempData["datacontainer"] = modelData;
MELIHAT
TempData dimaksudkan untuk menjadi contoh yang sangat singkat, dan Anda hanya boleh menggunakannya selama permintaan saat ini dan berikutnya saja! Karena TempData bekerja dengan cara ini, Anda perlu tahu pasti apa permintaan berikutnya, dan mengarahkan ke tampilan lain adalah satu-satunya waktu Anda dapat menjamin ini.
Oleh karena itu, satu-satunya skenario di mana menggunakan TempData akan berfungsi adalah saat Anda mengarahkan ulang.
sumber
coba yang ini
sumber
Saya ingin memperluas jawaban Jason Bunting
seperti ini
Dan Eli akan ada di sini untuk ide sesuatu tentang bagaimana membuatnya menjadi variabel generik
Bisa mendapatkan semua jenis controller
sumber
new ...()
karena Anda akan kehilanganRequestContext
- jika Anda sudah di controller yang sama, Anda mungkin tidak perlu membuat instance baru. Jika tidak, ambil cara berikut:SampelController sampleController = DependencyResolver.Current.GetService<SampelController>()
lalu:sampleController.ControllerContext = new ControllerContext(Request.RequestContext, sampleController);
maka Anda bisareturn sampleController.Index(2, "text");
Hanya memberi petunjuk :)