.NET URI ve Nokta Bug' ı

19-11-2007

Burada kesinlikle ilginç ve saçma bir şeyler var aşağıda ki kodu inceleyiniz :

Dim WTF As New Uri("http://www.example.com/test.?noktanerede")
Console.WriteLine(WTF.AbsoluteUri)

Kodun şu çıktıyı vermesini bekliyoruz :

http://www.example.com/test.?noktanerede

Ancak nedense .NET oradaki sondaki noktanın gereksiz olduğuna inanıp onu siliyor ve karşımıa şu çıkıyor:

http://www.example.com/test?noktanerede

Bu gerçek bir sistemde başıma geldi ve nokta kaybolduğundan dolayı 404 alıyorum, bu bilinen bir bug mı? Yoksa başka ilginç bir şey mi var?

Araştırmacı gazeteciliğimizi konuşturup ekibimiz sonuçlara ulaştı:

Neden noktalar kayboluyor?

Noktalar kayboluyor çünkü RFC3986 , 5.2.4 dermiş ki path' lerde noktalar silinecek. Tabii o böyle demiyor ama ben size özet geçiyorum.

Microsoft' ta demişki hayatımızda bir işi düzgün yapalım, RFC' ye uyalım. Dolayısıyla normal şartlar altında URI class' ı path kısmında nokta kabul etmiyor.

Bu Sorunu Nasıl Çözeceğiz?

Sorunu çözmek için bir denem yapmıştım ama çalışmadı. İlk başta çalıştığını düşündüm çünkü ancak testlerimde nokta yokken benzer başka bir cevap alıyormuşum. Dolayısıyla çalışmamış.

Ana sorun URI class' ının üzerine yazmamız gereken AbsoluteUri property' si overridable değil. Dolayısıyla bir şekilde bunu zorla yapmak gerekiyor. Aklıma reflection ya da ana System.dll i modifiye edip tekrar compile etmek geldi ama iki çözüm de çok kötü, uzun ve sağlıksız.

Dolayısıyla ben hala bir çözüm bulamadım, heyecanla sizin çözümlerinizi bekliyorum.

Recent Blog Posts

See all of the blog posts