เปลี่ยนเส้นทางไปยัง URI ภายนอกจากตัวควบคุม ASP.NET MVC


170

ฉันกำลังพยายามเปลี่ยนเส้นทางไปยัง URL ภายนอกจากวิธีการกระทำ แต่ไม่สามารถใช้งานได้ ใครสามารถให้ความกระจ่างในข้อผิดพลาดของฉันได้บ้าง?

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

ขอบคุณคริส


1
คุณมีข้อผิดพลาดอะไร หรืออาการ สิ่งนี้ไปได้ทุกที่หรือไม่?
Paul Sasik

คำตอบ:


342

หากคุณกำลังพูดถึง ASP.NET MVC คุณควรมีเมธอดคอนโทรลเลอร์ที่ส่งคืนสิ่งต่อไปนี้:

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

มิฉะนั้นเราต้องการข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดที่คุณได้รับในการเปลี่ยนเส้นทาง ฉันต้องการตรวจสอบให้แน่ใจว่า URL ไม่ว่างเปล่า


5
คุณสามารถทำสิ่งนี้แทน: ส่งคืน RedirectResult ใหม่ ("yourURL", จริง); ซึ่งเกือบจะเหมือนกัน แต่ให้พารามิเตอร์ในตอนท้ายเพื่อระบุว่าเป็นการเปลี่ยนเส้นทางแบบถาวรหรือไม่ (HTTP 301 เทียบกับอย่างอื่นอาจเป็น 307?)
ctb

@ Mr.Pichler มีแนวโน้มมากที่สุด 302 แต่คุณสามารถตรวจสอบกับ Fiddler ได้เสมอ
Yuriy Faktorovich

1
การเปลี่ยนเส้นทาง (rul) คือ 302 และ RedirectPermanent (url) คือ 301 ตรวจสอบ: stackoverflow.com/questions/17517318/…
TNT

มีความคิดในการทำงานกับไฟล์ HTML ในเครื่องไหม ใช้งานไม่ได้:> ส่งคืนการเปลี่ยนเส้นทาง ("C: /Users/Me/Documents/test.html");
Steve Eggering


15

ใช้จาวาสคริปต์

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

หมายเหตุ: ดังที่ @Jeremy Ray Brown กล่าวว่านี่ไม่ใช่ตัวเลือกที่ดีที่สุด แต่คุณอาจพบว่ามีประโยชน์ในบางสถานการณ์

หวังว่านี่จะช่วยได้


1
สิ่งนี้สามารถใช้งานได้ แต่ผู้ควบคุมจะตัดสินใจว่าจะดำเนินการอย่างไร คุณไม่จำเป็นต้องมีสคริปต์ในการเข้าร่วม
Jeremy Ray Brown

6
เชื่อหรือไม่ว่าวิธีการนี้ช่วยฉันได้ เรามีแอปพลิเคชั่น ASP.NET MVC / AngularJS ไฮบริดที่มีโค้ดเว็บฟอร์มเก่าจำนวนมากอยู่ทั่วทุกแห่ง ฉันใช้บางอย่างที่คล้ายกันเพื่อเปลี่ยนเส้นทางไปยัง URL ที่ใช้การกำหนดเส้นทางเชิงมุม เนื่องจากการกำหนดเส้นทางเชิงมุมตามเครื่องหมาย # ใน URL จึงเป็นที่รู้จักเพียงฝั่งไคลเอ็นต์ดังนั้นการเปลี่ยนเส้นทางจึงไม่สามารถใช้กับ URL ดังกล่าวได้
เสนอ

@TNT ใช่คุณถูกต้องฉันเพิ่งให้สิ่งนี้เป็นตัวเลือกซึ่งอาจเป็นประโยชน์ต่อผู้อื่น
shaijut

1
ขออภัยถ้าฉันไม่สุภาพ @stom ฉันใช้วิธีนี้เมื่อฉันต้องการเรียกใช้สคริปต์บางอย่างด้วยการเปลี่ยนเส้นทางเช่นนับการเยี่ยมชมหนึ่งครั้งที่ Google Analytics
TNT

ในที่สุดก็ใช้งานได้ วิธีการเปลี่ยนเส้นทางที่ตรงไปตรงมาของ @Yuriy ล้มเหลวสำหรับฉัน เพื่อเหตุผลด้านความปลอดภัยคำขอไปยังแอปพลิเคชัน MVC ของเราจะต้องรวบรวมข้อมูลผ่านพร็อกซีเซิร์ฟเวอร์ - IIS พร้อมกฎการเขียนซ้ำ + เขียนซ้ำ ชุดค่าผสมนี้อาจยุ่งกับ URL การเปลี่ยนเส้นทาง เช่น เมื่อฉันต้องการที่จะเปลี่ยนเส้นทางจากexample.com/actionเพื่อexample.org/?search=xyzใช้return Redirect("https://www.example.org/?search=xyz");ผลที่ได้คือการเปลี่ยนเส้นทางไปexample.com/?search=xyz
Kraken101



-3

ลองนี้ (ฉันใช้ตัวควบคุมหน้าแรกและมุมมองดัชนี):

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

สิ่งนี้จะไม่เปลี่ยนเส้นทางไปยัง URI ภายนอกและแทนไปยังดัชนีการกระทำบน Home Controller
Anthony Potts
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.