C # WebRequest.getResponse (): 400 Solicitação incorreta

Eu estou tentando baixar um arquivo de um servidor usando System.Web. Na verdade funciona, mas alguns links me causam problemas. Os links são assim:

<code>http://cdn.somesite.com/r1KH3Z%2FaMY6kLQ9Y4nVxYtlfrcewvKO9HLTCUBjU8IBAYnA3vzE1LGrkqMrR9Nh3jTMVFZzC7mxMBeNK5uY3nx5K0MjUaegM3crVpFNGk6a6TW6NJ3hnlvFuaugE65SQ4yM5754BM%2BLagqYvwvLAhG3DKU9SGUI54UAq3dwMDU%2BMl9lUO18hJF3OtzKiQfrC/the_file.ext
</code>

O código parece basicamente assim:

<code>HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
WebResponse response = request.getResponse();
</code>

getResponse () sempre lança uma exceção (Error 400 Bad Request). No entanto, eu sei que o link funciona porque eu posso baixar o arquivo com o Firefox sem problemas.

Eu também tentei decodificar o link com Uri.UnescapeDataString (link), mas esse link não funcionará no Firefox.

Outros links funcionam perfeitamente desta forma .. apenas estes não funcionam.

Editar:

Ok, eu descobri algo usando o wireshark:

Se eu abrir o link usando o Firefox, isso é enviado:

<code>&ME3@"dM*PNyAo PA:]GET /r1KH3Z%2FaMY6kLQ9Y4nVxYp5DyNc49t5kJBybvjbcsJJZ0IUJBtBWCgri3zfTERQught6S8ws1a%2BCo0RS5w3KTmbL7i5yytRpn2QELEPUXZTGYWbAg5eyGO2yIIbmGOcFP41WdrFRFcfk4hAIyZ7rs4QgbudzcrJivrAaOTYkEnozqmdoSCCY8yb1i22YtEAV/epd_outpost_12adb.flv HTTP/1.1
Host: cdn.somesite.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
</code>

Eu acho que apenas a primeira linha é o problema, porque WebRequest.Create (link) decodifica o URL:

<code>&MEz.@!dM/nP9@~P>.GET /r1KH3Z/aMY6kLQ9Y4nVxYp5DyNc49t5kJBybvjbcsJJZ0IUJBtBWCgri3zfTERQught6S8ws1a%2BCo0RS5w3KTmbL7i5yytRpn2QELEPUXZTGYWbAg5eyGO2yIIbmGOcFP41WdrFRFcfk4hAIyZ7rs6Mmh1EsQQ4vJVYUwtbLBDNx9AwCHlWDfzfSWIHzaaIo/epd_outpost_12adb.flv HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Host: cdn.somesite.com
</code>

(% 2F é substituído por /)

Outra edição:

Eu descobri que a classe Uri decodifica o url automaticamente: Uri uri = new Uri (link); // link não é decodificado Debug.WriteLine (uri.ToString ()); // link é decodificado aqui.

Como posso evitar isso?

Agradeço antecipadamente por sua ajuda.

questionAnswers(2)

yourAnswerToTheQuestion