Ich habe eine URL wie folgt: http://localhost:8080/search.json?q=L%u00e6r
, die die codierte Suche nach Lær ist.WebRequest.Create falsch entschlüsselt url
Leider erstellt eine WebRequest von dieser URL mit WebRequest.Create(url)
die folgende URL: http://localhost:8080/search.json?q=L%25u00e6r
.
Beachten Sie, dass es %u00e6
falsch dekodiert und %25u00e6r
produziert. Gibt es eine Möglichkeit, diese Art von Unicode-Escape-Wert entweder zu konvertieren oder WebRequest.Create zu erhalten, damit es korrekt behandelt wird?
Dies sollte höchstwahrscheinlich als Fehler im .net-Team gemeldet werden. WebRequest.Create()
kann die von Request.QueryString.ToString()
zurückgegebene Abfragezeichenfolge nicht verwenden, wenn die Abfrage ein §, æ, ø oder å (oder ein anderes nicht-ASCII-Zeichen) enthält. Hier ist eine kleine mvc-Aktion, mit der man es testen kann. Nennen Sie es mit der Abfrage Query?q=L%C3A6r
public ActionResult Query()
{
var query = Request.QueryString.ToString();
var url = "http://localhost:8080?" + query;
var request = WebRequest.Create(url);
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
return new FileStreamResult(stream, "text/plain");
}
}
bearbeiten:
Leider @ animaonline-Lösung funktioniert nicht mit Urls wie http://localhost:8080/search.json?q=Lek+%26+L%u00e6r
, die in http://localhost:8080/search.json?q=Lek & Lær
decodiert werden, wo WebRequest.Create
über die &
verwechselt wird, und denkt, dass es trennt Parameter, anstatt Teil des Parameters zu sein.
Wenn Sie es in ohne Codierung übergeben, doch wäre es für Sie die Codierung tun? – Base33
Ich habe die URL nicht erstellt, sie wurde von Dritten an die Anwendung übergeben. Jetzt muss ich die URL gegen die gleiche dritte Partei verwenden. Es funktioniert im Browser, aber nicht in C# – Marius
Ah okay! Versuchen Sie @ anomeaonline's Lösung, es sieht für mich sehr gut aus! – Base33