2016-06-19 14 views
0

Ich verwende asp.net MvcPass Paramter, die eine URL mit Parametern ist

Ich habe eine URL, die einige Parameter haben, einer von ihnen ist ein url zB www.example.com?p1=v1 & p2 = v2 & p3 = url & p4 = v4 ...

die URL, die ich hinzufügen möchte, hat wenige Parameter. Wie kann ich sie zu dieser URL hinzufügen? becuase aus dem zweiten Parameter die erste URL nehmen sie

zB www.example.com?p1=v1 & p2 = v2 & p3 = www.example2.com? p21 = v21 & p22 = v22 & p23 = v23 & v4 p4 = ...

p21, p22, p23 gehört zu der zweiten uRL (www.example2.com), aber die ersten uRL (www.example.com) unter p22 hat p23 ist es eigen

ps Ich kann den ersten URL-Prozess nicht steuern

Vielen Dank für Ihre Hilfe

+0

Was meinen Sie mit "Ich kann den ersten URL-Prozess nicht kontrollieren"? Können Sie die URL in Ihrer App erstellen oder nicht? – NightOwl888

Antwort

2

Sie sollten den Wert der Abfrage-String-Parameter url encode, bevor es in der URL zu senden:

http://www.example.com?p1=v1&p2=v2&p3=www.example2.com%3Fp21%3Dv21%26p22%3Dv22%26p23%3Dv23%26p4%3Dv4.. 

So in diesem Beispiel der Wert des p3 Parameter richtig codiert ist, URL Übertragung über das HTTP-Protokoll und kann am empfangenden Standort eindeutig auf seinen ursprünglichen Wert von www.example2.com?p21=v21&p22=v22&p23=v23&p4=v4 decodiert werden.

Es gibt integrierte Methoden in .NET, um dies zu erreichen. Zum Beispiel der EscapeDataString Methode:

string urlEncoded = Uri.EscapeDataString("www.example2.com?p21=v21&p22=v22&p23=v23&p4=v4"); 
// Will produce: www.example2.com%3Fp21%3Dv21%26p22%3Dv22%26p23%3Dv23%26p4%3Dv4 

Natürlich, wenn Sie automatisch die eingebauten Helfer in ASP.NET MVC diese URL-Codierung geschehen verwenden wird.

Wenn Sie andererseits die Erstellung dieser URL nicht kontrollieren können, werden Sie definitiv mit einer mehrdeutigen und falschen URL enden (wie die in Ihrer Frage), die kein gültiges System verstehen kann. Aus diesem Grund wurden bestimmte Standards eingeführt.

+0

Es funktioniert Danke. von dem, was ich gelesen habe EscapeDataString nur Zeichen in den Hexadezimalwert konvertieren, also warum es funktioniert? Wenn ich mein Beispiel ohne Parameter wie www.example.com?p1=v1&p2=v2&p3=www.example2.com verwende, funktioniert es auch ganz gut (es benötigt keine Parameter) – Joe