2012-05-03 14 views
9

Wykonuję przekierowanie z jednej strony do drugiej i kolejne przekierowanie z drugiej strony do trzeciej. Posiadam informację z pierwszej strony, która nie jest używana na drugiej stronie, ale musi zostać przeniesiona na trzecią stronę. Czy możliwe jest wysłanie adresu URL trzeciej strony z jej ciągami zapytania jako ciągiem zapytania do drugiej strony. Oto przykład:Jak wysłać adres URL z ciągami zapytań jako ciąg zapytania

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

Moim problemem jest to, że adres URL jest wysyłany jako ciąg kwerendy ma dwie zmienne string zapytanie, tak jak będzie system wie, że to, co znajduje się po & to druga zmienna drugiego URL i nie druga zmienna pierwszego adresu URL? Dziękuję Ci.

+0

Czy rozważałeś użycie zmiennych sesji? – V4Vendetta

Odpowiedz

12

Musisz zakodować adres URL, który przekazujesz jako parametr w przekierowanym adresie URL. W ten sposób:

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

Spowoduje to utworzenie poprawnego adresu URL bez podwójnego "?" i '&' znaków:

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

See MSDN: HttpServerUtility.UrlEncode Method

wyodrębnić przekierowanie z tego zakodowanego URL należy użyć HttpServerUtility.UrlDecode aby przekształcić go w prawidłowy adres URL ponownie.

+0

Dekodowanie/kodowanie adresu URL nie jest dobrze zdefiniowane. Każdy system operacyjny/przeglądarka/serwer ma swoje własne idiocracje. Implementacja zmieniła się pomiędzy .Netv1.1 i .Netv2.0, więc polecam postępować zgodnie z radą @JulioHM i używając base64 dla adresów URL, które muszą być w parametrach zapytań. http://bytes.com/topic/asp-net/answers/627843-urldecode-differences-net-1-1-2-0-a – Gabe

+1

"HttpServerUtility.UrlDecode", o którym wspomniałeś, jest dostępny poprzez 'HttpContext. Current.Server.UrlDecode' lub po prostu 'Server.UrlDecode' w webformach. Możesz także użyć statycznego 'HttpUtility.UrlDecode'. – BornToCode

1

ciąg kwerendy powinien wyglądać następująco:

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

Sprawdź: http://en.wikipedia.org/wiki/Query_string

powinien mieć jedną? znak i wszystkie parametry połączone z &. Jeśli wartości parametrów zawierają znaki specjalne, to tylko UrlEncode.

+0

To wygląda jak trzy ciągi zapytań do MyURL1. Chcę, aby nazwa i identyfikator były ciągami zapytań MyURL2. –

+0

Następnie uzyskaj dostęp do aktualnego QueryString przed przekierowaniem i przekaż parametry do następnego QueryString (te, które Cię interesują). – empi

+0

@DovMiller Mówię tylko, jak powinien wyglądać QueryString. Od Ciebie zależy, w jaki sposób uzyskasz QueryString, który chcesz przekazać na następny adres - to tylko ciąg znaków - możesz użyć podłańcucha itp. Lub po prostu uzyskać dostęp do wartości parametrów ze słownika QueryString. Być może nie w pełni rozumiem, co próbujesz osiągnąć. – empi

1

Uważam, że pomocne jest zakodowanie parametrów ciągu zapytania w Base64 przed wysłaniem. W niektórych przypadkach pomaga to, gdy musisz wysłać wszystkie rodzaje znaków specjalnych. Nie tworzy dobrych ciągów debugowania, ale chroni WSZYSTKIE, które wysyłasz, przed pomieszaniem z innymi parametrami.

Pamiętaj, że druga strona, która analizuje ciąg zapytania, musi również przeanalizować bazę Base64, aby uzyskać dostęp do oryginalnego wejścia.

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(); 
} 
Powiązane problemy