Ho una url come questa: http://localhost:8080/search.json?q=L%u00e6r
, che è la ricerca codificata di Lær.WebRequest.Create decodifica impropriamente l'URL
Sfortunatamente la creazione di una richiesta Web da questo URL utilizzando WebRequest.Create(url)
produce il seguente URL: http://localhost:8080/search.json?q=L%25u00e6r
.
Si noti che decodifica in modo errato %u00e6
e produce %25u00e6r
. Esiste un modo per convertire questo tipo di valore di escape unicode o ottenere WebRequest.Create per gestirlo correttamente?
Questo dovrebbe molto probabilmente essere segnalato come un bug al team .net. WebRequest.Create()
non può utilizzare la stringa di query restituita da Request.QueryString.ToString()
se la query contiene un §, æ, ø o å (o qualsiasi altro carattere non-ascii). Ecco una piccola azione in mvc che può essere utilizzata per testarlo. Chiamatelo con la query 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");
}
}
Edit:
Purtroppo @ soluzione animaonline non funziona con gli URL come http://localhost:8080/search.json?q=Lek+%26+L%u00e6r
, che vengono decodificati in http://localhost:8080/search.json?q=Lek & Lær
, dove WebRequest.Create
ottiene confuso circa la &
, e pensa che separa i parametri, anziché essere parte del parametro q
.
Se lo si passa senza codifica, sicuramente farebbe la codifica per te? – Base33
Non ho creato l'url, è stato dato all'applicazione da una terza parte. Ora ho bisogno di usare l'url contro la stessa terza parte. Funziona nel browser, ma non in C# – Marius
Ah okay! Prova la soluzione di @ anomeaonline, mi sembra davvero buona! – Base33