2011-07-28 58 views
5

Tôi có nhu cầu chuyển hướng trở lại trang hiện tại trừ đi bất kỳ đối số truy vấn nào.Response.Redirect (Request.Url.AbsolutePath) Luôn "An toàn"?

Tôi vừa tìm thấy Request.Url.AbsolutePath, có vẻ như nó chỉ cung cấp vé để chuyển đến Response.Redirect().

Dường như nó hoạt động trên máy tính của tôi. Có ai biết về bất kỳ vấn đề tiềm tàng nào đang chuyển hướng đến giá trị của tài sản này không? Thật khó để xác nhận rằng nó "an toàn" trong mọi trường hợp.

Trả lời

2

Nó có thể là một vấn đề nếu bạn "viết lại" URL trong nội bộ. Ví dụ, yêu cầu người dùng "/team.aspx" nhưng nội bộ bạn chuyển thực thi hoặc viết lại url là "/page.aspx?id=137".

Cá nhân, tôi thích sử dụng Request.RawUrl (luôn là địa phương) và bạn có thể tách chuỗi truy vấn.

Loại bỏ phần lưu trữ của yêu cầu không phải là vấn đề vì chuyển hướng HTTP có thể là đường dẫn trên Đường dẫn tuyệt đối ("/ foo/bar") và trình duyệt sẽ giữ nguyên giao thức, cổng và tên máy chủ.

+0

Tôi đọc đoạn đầu tiên của bạn nhiều lần nhưng vẫn không hoàn toàn hiểu. Nếu người dùng yêu cầu '/ team.aspx', thì tôi sẽ mong đợi' Request.Url.AbsolutePath' trả về '/ team.aspx'. '/page.aspx? Id = 137' đến từ đâu? –

+0

@Marcelo - Nhưng anh ấy không viết lại url. – JonH

+0

Jonathan, nếu bạn sử dụng bất kỳ hình thức URL nào viết lại URL trên AbsolutePath thì không phải là cùng một URL trên RawUrl. RawUrl là nội dung được gửi qua Yêu cầu HTTP và đó là những gì người dùng nhìn thấy trên trình duyệt của anh ấy. –

0

Tôi sẽ sử dụng Request.Url.OriginalString.

Đường dẫn tuyệt đối thoát khỏi phần máy chủ lưu trữ của URL.

Hãy xem này: http://wdevs.blogspot.com/2009/03/url-properties-of-request-to-aspnet.html

+0

Nhưng 'OriginalString' bao gồm chuỗi truy vấn. Tôi biết tôi có thể xóa nó đi, nhưng có gì sai khi chuyển hướng đến 'Request.Url.AbsolutePath'? Miễn là tôi đang chuyển hướng đến cùng một tên miền, tôi không chắc mình có hiểu vấn đề không. –

+0

@JOnathan Wood - Misread bài đăng của bạn, bạn nói đúng, không có vấn đề gì với những gì bạn đang cố gắng làm. Nếu bạn không muốn các tham số truy vấn thực tế sau đó sử dụng 'Request.Url.AbsolutePath' – JonH

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