Redirect ke URI eksternal dari ASP.NET MVC controller

170

Saya mencoba mengalihkan ke url eksternal dari metode tindakan tetapi tidak bisa berfungsi. Adakah yang bisa menjelaskan kesalahan saya?

public void ID(string id)
    {
        string url = string.Empty;
        switch (id)
        {
            case "DB2FCB11-579F-4DA2-A68C-A6495B9BAAB5":

                url = "http://www.somesite.com";
                break;
        }
        Response.Redirect(url, true);
    }

Terima kasih, Chris

pengguna135498
sumber
1
Apa kesalahanmu Atau gejala? Apakah ini kemana-mana?
Paul Sasik

Jawaban:

342

Jika Anda berbicara tentang ASP.NET MVC maka Anda harus memiliki metode pengontrol yang mengembalikan yang berikut:

return Redirect("http://www.google.com");

Kalau tidak, kita perlu info lebih lanjut tentang kesalahan yang Anda dapatkan di redirect. Saya akan melangkah untuk memastikan url tidak kosong.

Yuriy Faktorovich
sumber
5
Secara opsional, Anda dapat melakukan ini sebagai gantinya: kembalikan RedirectResult baru ("yourURL", true); yang hampir persis sama, tetapi memberi Anda parameter di akhir untuk menunjukkan apakah itu redirect permanen atau tidak (HTTP 301 vs sesuatu yang lain, 307 mungkin?)
ctb
@ Mr.Pichler Kemungkinan besar 302, tetapi Anda selalu bisa mengecek dengan Fiddler.
Yuriy Faktorovich
1
Redirect (rule) adalah 302 dan RedirectPermanent (url) adalah 301. Periksa: stackoverflow.com/questions/17517318/…
TNT
Adakah pemikiran untuk membuat ini bekerja dengan file HTML lokal? Tidak berfungsi:> kembalikan Pengalihan ("C: / Pengguna /Me/Documents/test.html");
Steve Eggering
1
@SteveEggering lihat stackoverflow.com/questions/10830212/...
Yuriy Faktorovich
15

Menggunakan JavaScript

 public ActionResult Index()
 {
    return Content("<script>window.location = 'http://www.example.com';</script>");
 }

Catatan: Seperti yang dikatakan @Jeremy Ray Brown, Ini bukan pilihan terbaik tetapi Anda mungkin menemukan berguna dalam beberapa situasi.

Semoga ini membantu.

shaijut
sumber
1
Sesuatu seperti ini dapat bekerja, tetapi controller memutuskan tindakan apa yang harus dilakukan. Anda tidak perlu skrip untuk terlibat.
Jeremy Ray Brown
6
Percaya atau tidak, pendekatan seperti ini memang membantu saya. Kami memiliki aplikasi ASP.NET MVC / AngularJS hybrid dengan banyak kode formulir web yang lebih lama di semua tempat. Saya menggunakan sesuatu yang mirip dengan mengarahkan ulang ke URL yang menggunakan perutean sudut. Karena perutean sudut mengikuti tanda # di URL, itu hanya dikenali sisi klien, sehingga Pengalihan tidak dapat digunakan untuk URL tersebut.
pertanyaan ini
@TNT Ya Anda benar, saya baru saja memberikan ini sebagai opsi, yang mungkin berguna bagi orang lain.
shaijut
1
Maaf jika saya tidak sopan @stom. Saya menggunakan pendekatan ini ketika saya perlu menjalankan beberapa skrip dengan pengalihan, seperti menghitung satu kunjungan di Google Analytics.
TNT
Ini akhirnya berhasil. Solusi redirect langsung Yuriy gagal untuk saya. Demi alasan keamanan, permintaan yang menuju ke aplikasi MVC kami harus dirayapi melalui server proxy - IIS dengan aturan Rewrite addin + rewrite. Kombinasi ini mungkin mengacaukan dengan URL pengalihan. Jadi yaitu. ketika saya ingin mengalihkan dari example.com/action ke example.org/?search=xyz , menggunakan return Redirect("https://www.example.org/?search=xyz");hasilnya dialihkan ke example.com/?search=xyz .
Kraken101
0

Mungkin solusi yang dicari seseorang adalah ini:

Response.Redirect("/Sucesso")

Ini berfungsi saat digunakan dalam Tampilan juga.

Pedro Henrique Silva
sumber
0

Mungkin Anda dapat menggunakan metode Redirect URL menggunakan AJAX . Saya telah melakukan ini di beberapa tugas kerja

masukkan deskripsi gambar di sini

Agung Panduan
sumber
-3

Coba ini (Saya sudah menggunakan pengontrol Beranda dan Tampilan Indeks):

return RedirectToAction("Index", "Home");
Yilmazam
sumber
Ini tidak akan mengarahkan ulang ke URI eksternal dan sebagai gantinya ke Tindakan Indeks pada Home Controller.
Anthony Potts