2012-05-03 37 views
9

Tôi đang chuyển hướng từ trang này sang trang khác và chuyển hướng khác từ trang thứ hai đến trang thứ ba. Tôi có thông tin từ trang đầu tiên không được sử dụng trên trang thứ hai nhưng phải được chuyển sang trang thứ ba. Có thể gửi URL của trang thứ ba bằng Chuỗi truy vấn của nó dưới dạng Chuỗi truy vấn đến trang thứ hai không. Dưới đây là một ví dụ:Làm cách nào để gửi URL có Chuỗi truy vấn dưới dạng Chuỗi truy vấn

Response.Redirect("MyURL1?redi=MyURL2?name=me&ID=123"); 

Vấn đề của tôi là URL được gửi như một Query String có hai biến Query String, vậy làm thế nào sẽ hệ thống biết rằng những gì sau khi & là biến thứ hai của URL thứ hai và không biến thứ hai của URL đầu tiên? Cảm ơn bạn.

+0

Bạn đã cân nhắc sử dụng các biến phiên cho điều đó? – V4Vendetta

Trả lời

12

Bạn phải mã hóa url mà bạn chuyển làm thông số trong URL chuyển hướng của mình. Như thế này:

MyURL = "MyURL1?redi=" + Server.UrlEncode("MyURL2?name=me&ID=123"); 

Điều này sẽ tạo một url chính xác mà không có dấu '?' và '& nhân vật:

MyURL1?redi=MyURL2%3fname%3dme%26ID%3d123 

Xem MSDN: HttpServerUtility.UrlEncode Method

Để trích xuất Url chuyển hướng của bạn từ url mã hóa này, bạn phải sử dụng HttpServerUtility.UrlDecode để biến nó thành một url đúng một lần nữa.

+0

Giải mã/mã hóa URL không được xác định rõ. Mỗi hệ điều hành/trình duyệt/máy chủ đều có sở thích riêng. Sự thay đổi được thay đổi giữa .Netv1.1 và .Netv2.0 vì vậy tôi khuyên bạn nên làm theo lời khuyên từ @JulioHM và sử dụng base64 cho các URL cần phải có trong paramaters truy vấn. http://bytes.com/topic/asp-net/answers/627843-urldecode-differences-net-1-1-2-0-a – Gabe

+1

'HttpServerUtility.UrlDecode' mà bạn đề cập có thể truy cập thông qua' HttpContext. Current.Server.UrlDecode' hoặc chỉ 'Server.UrlDecode' trong biểu mẫu web. Bạn cũng có thể sử dụng 'HttpUtility.UrlDecode' tĩnh. – BornToCode

1

chuỗi truy vấn của bạn sẽ trông như thế này:

MyURL1?redi=MyURL2&name=me&ID=123 

Kiểm tra: http://en.wikipedia.org/wiki/Query_string

Bạn nên có một? ký và tất cả các tham số được kết hợp với &. Nếu giá trị thông số chứa các ký tự đặc biệt chỉ cần UrlEncode chúng.

+0

Có vẻ như ba chuỗi truy vấn đến MyURL1. Tôi muốn tên và ID là chuỗi truy vấn của MyURL2. –

+0

Sau đó truy cập QueryString hiện tại trước khi chuyển hướng và chuyển các tham số tới QueryString tiếp theo (những cái mà bạn quan tâm). – empi

+0

@DovMiller Tôi chỉ nói cách QueryString sẽ trông như thế nào. Tùy thuộc vào cách bạn có được QueryString mà bạn muốn chuyển đến địa chỉ tiếp theo - nó chỉ là một chuỗi - vì vậy bạn có thể sử dụng chuỗi con, v.v. hoặc chỉ truy cập các giá trị tham số từ từ điển QueryString. Có lẽ, tôi không hoàn toàn hiểu những gì bạn đang cố gắng đạt được. – empi

1

Tôi thấy hữu ích khi mã hóa tham số chuỗi truy vấn trong Base64 trước khi gửi. Trong một số trường hợp, điều này sẽ giúp, khi bạn cần gửi tất cả các loại ký tự đặc biệt. Nó không thực hiện cho các chuỗi gỡ lỗi tốt, nhưng nó sẽ bảo vệ bất cứ điều gì bạn đang gửi từ việc trộn lẫn với bất kỳ thông số khác.

Chỉ cần ghi nhớ, phía bên kia đang phân tích cú pháp chuỗi truy vấn cũng sẽ cần phải phân tích cú pháp Base64 để truy cập đầu vào gốc.

0
using System.IO; 
using System.Net; 

static void sendParam() 
{ 

    // Initialise new WebClient object to send request 
    var client = new WebClient(); 

    // Add the QueryString parameters as Name Value Collections 
    // that need to go with the HTTP request, the data being sent 
    client.QueryString.Add("id", "1"); 
    client.QueryString.Add("author", "Amin Malakoti Khah"); 
    client.QueryString.Add("tag", "Programming"); 

    // Prepare the URL to send the request to 
    string url = "http://026sms.ir/getparam.aspx"; 

    // Send the request and read the response 
    var stream = client.OpenRead(url); 
    var reader = new StreamReader(stream); 
    var response = reader.ReadToEnd().Trim(); 

    // Clean up the stream and HTTP connection 
    stream.Close(); 
    reader.Close(); 
} 
Các vấn đề liên quan