Mono - Uri клас

Правя HttpWebRequest на url, подобен на този:

"http://mysite.com/search?query=my+search+string"

Проблемът е, че Uri класът го избягва с %, а сайтът, към който правя заявката, не може да се справи с екранираните знаци. (Нямам контрол да коригирам сайта)

Така че опитах този [Остарял] конструктор:

new Uri(myUriString, true);

Но изглежда нямаше никаква разлика, при отстраняване на грешки моят Uri все още беше избягал.

Изпълнявам това на Mac с Mono, но не съм го пробвал на стандартен .Net на Windows, за да видя дали има същото поведение.

Има ли друг начин да се заобиколи този проблем?


person jonathanpeppers    schedule 09.01.2011    source източник


Отговори (2)


избягах

Uri uri = new Uri("http://mysite.com/search?query=my+search+string");
Console.WriteLine(uri.ToString());

чрез Microsoft .NET Runtime и Mono на машина с Windows 7 и не е избягал от знаците. Сигурни ли сте, че този URL адрес не се добавя към друг URL адрес, където смята, че това е параметър на заявка?

person Andrew T Finnell    schedule 09.01.2011
comment
Изпратете го чрез HttpWebRequest.Create и погледнете получения RequestUri. (И може би не извиквайте ToString, погледнете Uri обекта, докато отстранявате грешки) Ако все още виждате това, може да е версията на Mono на Mac. - person jonathanpeppers; 10.01.2011
comment
@Jonathan сега ти отговарям на моя Mac. Проведох същите тестове, дори с HttpWebRequest.Create() и не мога да го накарам да направи това, което казвате. Можете ли да публикувате пълен примерен код, за който твърдите, че е неуспешен, и резултата от него? Използвам mono 2.8.2 на OS X 10.5.7. Наистина имам чувството, че не поставяте това, което мислите, че сте като Uri низ. Моля, проверете вашия пример и се уверете, че точно повтаря това, което използвате. Ако сайтът не е чувствителен, публикувайте действителния URI. Можете да промените името на домейна, ако е необходимо. - person Andrew T Finnell; 10.01.2011
comment
Добро прозрение, сър. Всъщност извиквах HttpUtility.UrlEncode на моя низ за търсене, така че нямаше проблем с класа Uri, благодаря. - person jonathanpeppers; 10.01.2011

За съжаление, не виждам начин за това. Екранирането на знаци чрез шестнадесетични кодове е в спецификацията на Uri и трябва да се спазва от сървъра.

person Femaref    schedule 09.01.2011