Chuyển hướng đến URI bên ngoài từ bộ điều khiển ASP.NET MVC


170

Tôi đang cố gắng chuyển hướng đến url bên ngoài từ một phương thức hành động nhưng không thể làm cho nó hoạt động. Bất cứ ai có thể làm sáng tỏ lỗi của tôi?

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);
    }

Cảm ơn, Chris


1
Lỗi của bạn là gì? Hay triệu chứng? Cái này có đi đâu không?
Paul Sasik

Câu trả lời:


342

Nếu bạn đang nói về ASP.NET MVC thì bạn nên có một phương thức điều khiển trả về như sau:

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

Nếu không, chúng tôi cần thêm thông tin về lỗi bạn gặp phải trong chuyển hướng. Tôi đã bước qua để đảm bảo url không trống.


5
Tùy chọn, bạn có thể làm điều này thay vào đó: trả về RedirectResult mới ("yourURL", true); gần như giống hệt nhau, nhưng cung cấp cho bạn tham số ở cuối để cho biết liệu đó có phải là chuyển hướng vĩnh viễn hay không (HTTP 301 so với cái gì khác, 307 có thể?)
ctb

@ Mr.Pichler Rất có thể là 302, nhưng bạn luôn có thể kiểm tra với Fiddler.
Yuriy Faktorovich

1
Redirect (rul) là 302 và RedirectP Permanent (url) là 301. Kiểm tra: stackoverflow.com/questions/17517318/ Kẻ
TNT

Bạn có suy nghĩ gì về việc làm cho nó hoạt động với một tệp HTML cục bộ không? Không hoạt động:> return Redirect ("C: /Users/Me/Document/test.html");
Steve Eggering

1
@SteveEggering kiểm tra stackoverflow.com/questions/10830212/
trộm

15

Sử dụng JavaScript

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

Lưu ý: Như @Jeremy Ray Brown đã nói, Đây không phải là lựa chọn tốt nhất nhưng bạn có thể thấy hữu ích trong một số tình huống.

Hi vọng điêu nay co ich.


1
Một cái gì đó như thế này có thể hoạt động, nhưng một bộ điều khiển quyết định hành động nào để thực hiện. Bạn không cần một kịch bản để tham gia.
Jeremy Ray Brown

6
Dù bạn có tin hay không, một cái gì đó giống như cách tiếp cận này đã giúp tôi. Chúng tôi có một ứng dụng ASP.NET MVC / AngularJS lai với rất nhiều mã mẫu web cũ hơn ở khắp mọi nơi. Tôi đã sử dụng một cái gì đó tương tự để chuyển hướng đến một URL sử dụng định tuyến Angular. Vì định tuyến góc theo dấu # trong URL, nên nó chỉ được nhận dạng phía máy khách, do đó Redirect không thể được sử dụng cho các URL đó.
tài

@TNT Có bạn đúng, tôi chỉ cung cấp tùy chọn này, có thể hữu ích cho người khác.
shaijut

1
Xin lỗi nếu tôi không lịch sự @stom. Tôi sử dụng phương pháp này khi tôi cần chạy một số tập lệnh với chuyển hướng, như đếm một lượt truy cập tại Google Analytics.
TNT

Điều này cuối cùng cũng hoạt động. Giải pháp chuyển hướng đơn giản của @Yuriy đã thất bại đối với tôi. Vì lý do bảo mật, các yêu cầu hướng đến ứng dụng MVC của chúng tôi phải thu thập dữ liệu thông qua máy chủ proxy - IIS với quy tắc Rewrite addin + viết lại. Sự kết hợp này có thể gây rối với URL chuyển hướng. Vì vậy, tức là. khi tôi muốn chuyển hướng từ example.com/action sang example.org/?search=xyz , sử dụng return Redirect("https://www.example.org/?search=xyz");kết quả là chuyển hướng đến example.com/?search=xyz .
Kraken101

0

Có lẽ giải pháp mà ai đó đang tìm kiếm là đây:

Response.Redirect("/Sucesso")

Công việc này khi được sử dụng trong Chế độ xem là tốt.



-3

Hãy thử điều này (Tôi đã sử dụng Trình điều khiển gia đình và Chế độ xem chỉ mục):

return RedirectToAction("Index", "Home");

Điều này sẽ không chuyển hướng đến một URI bên ngoài và thay vào đó là Hành động chỉ mục trên Bộ điều khiển gia đình.
Anthony Potts
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.