2010-04-08 41 views
27

Tôi có một URL trả lại chuyển hướng HTTP 302 và tôi muốn nhận được URL chuyển hướng đến.Lấy vị trí từ WebClient trên chuyển hướng HTTP 302?

Vấn đề là System.Net.WebClient dường như thực sự theo dõi nó, điều này thật tệ. HttpWebRequest dường như làm như vậy.

Có cách nào để tạo một yêu cầu HTTP đơn giản và lấy lại vị trí mục tiêu mà không có WebClient theo dõi nó không?

Tôi bị cám dỗ thực hiện giao tiếp socket thô vì HTTP đủ đơn giản, nhưng trang web sử dụng HTTPS và tôi không muốn thực hiện Handshaking.

Cuối cùng, tôi không quan tâm mà lớp tôi sử dụng, tôi chỉ không muốn nó theo HTTP 302 chuyển hướng :)

Trả lời

17

On HttpWebRequest bạn có thể đặt AllowAutoRedirect-false để xử lý các chuyển hướng chính mình.

14

HttpWebRequest có thuộc tính AllowAutoRedirect mà bạn có thể đặt thành false (it is always true for WebClient), sau đó nhận tiêu đề HTTP Location.

+0

Ghi chú tốt và được ẩn trên trang ngay phía trên phần mà liên kết này trỏ tới. https://msdn.microsoft.com/en-us/library/system.net.webclient.aspx?f=255&MSPPError=-2147217396#Examples – dragon788

20

Nó khá dễ dàng để làm

Giả sử bạn đã tạo một HttpWebRequest gọi myRequest

// don't allow redirects, they are allowed by default so we're going to override 
myRequest.AllowAutoRedirect = false; 

// send the request 
HttpWebResponse response = myRequest.GetResponse(); 

// check the header for a Location value 
if(response.Headers["Location"] == null) 
{ 
    // null means no redirect 
} 
else 
{ 
    // anything non null means we got a redirect 
} 

Excuse bất kỳ biên dịch lỗi tôi không có VS ngay trước mặt tôi, nhưng tôi đã đã sử dụng điều này trong quá khứ để kiểm tra chuyển hướng.

+0

Đã thêm chuyển hướng cho phép là sai, vì đó là một phần của OP ban đầu. – Justin

+1

Lỗi: 'AllowAutoRedirect' không phải' AutoAllowRedirect' –

+0

@JohnDyer cảm ơn John Tôi đã cập nhật ví dụ! – Justin

0

Ngoài ra, đối với người chỉ cần vị trí mới, HttpResponseMessage có thuộc tính RequestMessage. Đôi khi nó có thể hữu ích, bởi vì WebClient không hỗ trợ thay đổi thuộc tính AllowAutoRedirect sau khi được thiết lập.

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