2008-10-20 24 views
17

Trên ASP.net MVC, cách "đúng" để có bộ điều khiển trả về Chuyển hướng 301 sang trang web bên ngoài là gì?Trả lại 301 Chuyển hướng từ Bộ điều khiển Hành động

Chức năng chuyển hướng khác nhau dường như chỉ trả lại liên kết hoặc tuyến đường tương đối mà tôi đã ánh xạ theo cách thủ công, nhưng không có cách nào để nói "Thực hiện chuyển hướng 301 thành http://example.com".

Tôi nghĩ rằng tôi chỉ có thể đặt Response.StatusCode hoặc sử dụng Response.Redirect, nhưng đó có phải là cách thực hiện trong MVC không? Hoặc có một "cách chính xác" chính thức để thực hiện chuyển hướng không?

Cập nhật: Trong khi đó, tôi đã viết một ActionResult cho rằng: PermanentRedirectResult

Cập nhật 2: Kể từ ASP.net 4.0, Thường trực Chuyển hướng là part of the Framework.

Trả lời

1

Vì bạn đang nói về chuyển hướng đến URL mà bạn không biết gì về định tuyến (có thể là trang nội bộ (suy nghĩ ASP.NET cổ điển) hoặc tài nguyên bên ngoài) thì điều duy nhất bạn có thể làm là đặt mã trạng thái và gửi trình duyệt của người dùng trên đường đi.

Tại chuỗi này trong MVC, bạn lo lắng về việc đưa người dùng đến Chế độ xem của họ, nhưng Chế độ xem đó không nằm trong tầm kiểm soát của bạn và có thể thậm chí không phải là Chế độ xem. Vì vậy, cuối cùng bạn đang làm điều này tốt nhất bạn có thể trong trường hợp này, và kiến ​​thức của tôi không phá vỡ bất kỳ "quy tắc" MVC.

Tôi hy vọng rằng sẽ giúp.

+2

Đó là phương pháp tôi đã chọn bây giờ, tôi đang đặt Response.StatusCode thành 301 và Response.RedirectLocation đến URL mục tiêu –

0

Điều đó có giúp ích gì không? http://blog.eworldui.net/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx

Có vẻ như bạn chỉ cần thay thế đường dẫn ảo theo URL theo ý thích của mình.

+0

Vấn đề với cách tiếp cận đó: Có vẻ như tôi phải thêm Tuyến đường vào tuyến đường của mình, nhưng vì tôi không biết Url đích trước Hành động điều khiển, tôi không thể đặt nó trong bảng tuyến đường và vì url là chỉ sử dụng thời gian, tôi không muốn thêm các tuyến đường không cần thiết vào bảng. –

1

Tôi thực hiện chuyển hướng để hỗ trợ URL cũ.

Trình điều khiển của tôi trông giống như thế này & hellip;

Public Class ThingController 
    Inherits System.Web.Mvc.Controller 

    Function Details(ByVal id As String) As ActionResult 
     Dim RedirectId As Guid 
     Select Case key 
      Case "legacyurlone" 
       RedirectId = New Guid("c564c0c1-c365-4b0c-bc33-fd4eadf0551b") 
      Case "legacyurltwo" 
       RedirectId = New Guid("157fa15b-8d5d-4f04-87cc-434f7ae93dfa") 
      Case Else 
       RedirectId = Guid.Empty 
     End Select 
     If Not RedirectId = Guid.Empty Then 
      Response.StatusCode = Net.HttpStatusCode.MovedPermanently 
      Response.RedirectLocation = Url.RouteUrl("IdOnly", New With {.id = RedirectId}) 
      Return Nothing 
     End If 
     Dim ThingId As Guid = New Guid(id) 
     Dim db As New ThingEntities 
     Dim Model As Thing = ... 
     Return View(Model) 
    End Function 

    ... 

End Class 

Tôi tự hỏi liệu tôi có thể xử lý điều này một cách rõ ràng hơn với hai tuyến đường và chức năng điều khiển hay không.

16

Sử dụng

Response.RedirectPermanent("http://www.google.com"); 

hoặc trả lại một loại ActionResult từ một bộ điều khiển:

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

cung cấp bởi khuôn khổ ASP.net 4.0.

Các vấn đề liên quan