From 3b606965e4d2616ae2e218d8b7824681ce1ab898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20de=20Vandi=C3=A8re?= Date: Mon, 4 Apr 2022 09:41:14 +0200 Subject: [PATCH] encode string param --- logo.pdn | Bin 8833 -> 18535 bytes logo.png | Bin 2470 -> 5671 bytes .../QueryStringBuilder.cs | 4 +++- .../QueryStringBuilderTests.cs | 11 ++++++++++- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/logo.pdn b/logo.pdn index 562dbff1fbc8ec9851cf712feae552b4276b11f0..66b4e5fe325e16a88f273fb2c84957892dabc28a 100644 GIT binary patch literal 18535 zcmd_Q2XqtHx-g1kz?hnZP(m*W5Co`=8rYaoA4wx=)FrCwjOwUsB#J4a1&9fdPy#jq z5=iJFfe?xz5J*CCfW#085OC))t_N@i}qR(U~30P#iD;#eAc8h9LXO93>pxz#+?qM zJBk^|7B?Os8%Hr|+)-Q_mpO{TV$%nW&9lcMQQSW^FN($dwgJHanm@>G;HxwVnp}e7 zAbBaZdQ7B8$tNgN6_7tO`7acz{Zd7y1vDwO8X5$KBY>TaWEwO9L{I0FV+l_p&NU;y@&&$;tJQ1x1}Wy`SZFebSZ8wDU2%m{4o8C$krxKt z0#L-jU_ArYfJT%M$&?~MP3V30xGc%`=wXK>?34*Pm@;XSSVbIrKTk?34%3U0)q zuoR<+;}Qu?LXprcT(wC-V*u_%h@mjUkdP)cOQh};$LpuWVtjxTWGE2C&SKE$1jN8u zNuyiG;21$QpGRP7EfN5XE(I?n5KGkvE2%c6lx%?wHyQ+bw=f{aA(xe~M@=4)G9f}D zLQD_AhNPVXycFsfgzlN_?p}Lb3bo4!MTnHmglh1}7e-vl$M(!Jv<(;JCuivfBL2m@YvP z;WDZev6~}$J_zw`DbO5O>NGT$SYv0ZQ-B$k3OQ_+J!X$YBUk1El5XvN*#?Fj&Wju!fcLE2q%?EXK{H>s+DE1MvX3u+{v>$AWcx9 z_iA(=hD8bTd7#)rvp{hGR799@wagx{#ihQKLmyQnlNPy!Y4^r7HXh&Pmn0Ov6pLey znm8;j-^1k4v`7LYNlxPc#R8K~pfU2~5Z9yEM%_ufRBZMK)pnYXVenZ@;iQ7*5oydq zzBFKAMZ;ExpBpuXb-0qFmEovVtFtS_AkS{1ga}A4RZ*;5iGZ&qd6DV#Sc0e#O=x@x zl|$;m5-hh#qtzg?xLy?03iu37P(_pJqhbZcpy5+2Mk61O@`E7>1|Srjj7D*4!l9rH z^T|Lz)gGkTz+}LwOD6pcpM=Y0$KqiJ-J&-r34sa=DnPdil+lDfnusaTLk;)u;nm-}=Ifa_3E&4fE(MI15(pjB$vpu;Z1-CCNPT&OUjd(GnfFp5G%|HS-nhil+AT&sTPjOOjBwT zuprAZQjOtp)}a3#kdJ3Smm3m=yw?Y8S3G zAR#J37sa)@h|G<{F`Yx_HybG?929y`p_^fg(ydy1kg8X)>98gpqYM|wt#+5klcG|hgw7X3g-l@t0&%e_ z=#ujTpd^8Lg5H#c6T$)9DaXu4nO~?0(ojW`5lxs#aS5?OW5SD|6q+mGb|jae&8mML}|f6t*4_JFuWx$4PRjFkv(!VblhN0|^b=qY3ikpqK;!>#&qjndBq^ zrjhNGAv(Hv@A}*qj81!Nldx z6fU=+6qQ~E7@~mN9SE$A8oR~`K_u3d{h7;6k=n{sRFVzuB zDo3nV#u);M4WkF7ah8@%QLtjv2q}1th$+dE(v(Ig&QBQVd>~2yI*&c-6kC{7M=BUf zg{`Cv0C-LmV0j?6Ne2WZaVEsi)Wd^AmveQc}4Bm(!IZni+QacyXCro#eQ!GMq4KFgsf*^vPK=I(fzpI!a^4c^tqR<3Vbt zMI@%FaTN=cf>yqY>w-jPvsOUyV}XzY;lgN)=`l(%DKCz5%mF0Ib{Oo6l#Z?vr<{63 zXpb`7Qcw|$*mNEjlPBX#844W{pS%`C=3v#0$D8VxfeoGaAfMOlM~p?J--B?V$>JfGr8LcwC+?sEx$E zOi7H#<|)Ksk_Lsi!5tF|gAp8;s^oDGA!a}kg3gr#ekBCzl^ixT;MPdvfPrm>91v9{ zrcli`4a^aVVl-HVJ3?$9$o9b$mL%$y#sE`5%67`*3a%Yuq!>vRldqx^Y(QazP^ZqS zv76LX8U$ziS4F%STB`{ zO(@fEh#)#u6b~4KJgy<`V-P;Qj3clbqbi*x3R?skpNGaXaj=*qg?h9S(q5)ebPh;p zvr#!rm)>s>(se!+*C+PTMKO)Z@6@XOfF%}ZGI>S@CP-L$GDOW$2UHRj1!OYhBACw! zutgBTk&-;%AO)RH!Gvif9E!&YC>bzaj?g@y6ma-d7NmEs*lsIS3{Q$83JHFzjXe5`I@gEiedpAWH{Y{8lqB zAW%d>z=sK8zD#GM!*(czs0oTt&2Te7mk!6ZFs@G#uDBtfgfA-Y>>qpI{;O_HPnaf;%ki#;^EOczLMtv*c77N^{N zyNVDaa;03a2ytwrh3Q5C9wrp+rp3w+gku7+ORVN7 z`FuZBjE3U@nlQ=(JcNT!p+KIXOQ$3F62Fh{k1F_aD__eJaRdTCN0JbN5>OPPD)lg6 zqlKJaowgo6z$0~S;c!XO(;1cRjb3lpWB-6nl-J(z;PP#100N9EIWPq47 z$n6zby<(%!Zx>KVa*H_mKED!kieOYBVu_sw4I`B_z%eO1<{)i6O2F)gBp!Cs5J2z% zMCB!cBxI(F#cEh4lKTx#U&^iUnox$=402HsH5D^qDhl16f>aJ5E|W4z#ir5o)Z#eA zqv9-;k*yJ0JWddn@xu;(K=0BaGL^`T1tgJp#Gqk^WMLjpM>A4TD%ZjD6I4V(Q%mJ? zU4SAC5+1i#$B)EWHk#FfGE5#U3|pltt4GDvOHyp9hZTg9Hi-eYfv_zQ*O4}()h0H` znUsK3%Xg7hRWiutODSBn2X`Y%t{%c+5fMeifQzZoV{(pLVYFi=sZyHs`Giz6!$!p& z9EDz~bOpTX4sX2lOa14vr=4uC8_}R zVGY+C2Gxl~FhU1YJTr%xpxV8FH=r}oJnP40$CFFDZFMA>68n2JV=725P;&gi&Q>BC`-CksNYA5sEiyJFuW1e zqe{hti7;x0q*R5^<|i#zmy^yV6`KK-c?ln=1YA-~jM*3nTdcRSO-fkmA`CX2TFg)Y zIIMSzqt-A*Bq2Qr(4=))`DTZL;pN$qYz|55Q9u^th3rBaY(-=abt)88c_@$)N?8#z zY)$a7u-O|B7{oejf^MKHv=j$7m9(2V0wp0)qBd0$;Ug4SC`lqN1L!wcXGR|TYC=&_}8eod!JS&62 z_sBst=w_K51WRrTusk$|%a;)WF0GVYznAS-XuRgAk)W8v6ov&!z~+Q7=`)6-R2QLl z3LRQ2jURBwEhwtc07`juh1#9yTlGwfX0kLkklbj*-S!G z`ceTSA9ASZY8PNefLp(I^o)u3vcB9MxcEKlcR0%6P#`ckA@;NhuKsNQT-;3^X)R(hy(3xgI^ zvMtJ#M#&MdnY;j`p~L!w29?Q~L;z!w77sy77(s+UVM&M<0kjf2B`#pd~Su8zB?M^nT3Ag?Yk=#jQ8tW?9lGV)JYm?oTMs@uMUqMfn~87`(ynCLS!^d2k*eZcfS%%pxd}+8vr8-*3QVD-3|563 z(?!J;i$$HJ8s#Ef%#r(|RE$GNA%?^Zc|kE@7TaYp0P*30Fg<9MNs_*#ENudx8!n<&ZpqLmD}cD)IxS zSjvPVwy4D9wz(NP5#1WKI2CMA=aT}ELkhW7VzyVV(Zg&{P)15RD;M^nZkR)J#;7cj zoefGE_OQdQ6X8~)Cag%I3BQqazl4xgVL@016+?%6Vge_wO++ZL096y5Fx3z7wPwE0 z#G^9}u$3FrMtCVO?loIjIyIOy00uOL$XQ}5EF|0_1ePE$D3_}>baU9pG%Ms1PJ*Gw zta=RBdl_7x&MEiDP=$eNkn&YDI~nA%le!KtkWoa29RM6b6G}KmEJs+R3E~nVPI}x3 zAC_VY2^`~?&HA{(AvQC728Y38);JXom&q*B3+Of|7&F6mCQIm~p;nOehBPWB&B6n8 z0UI?)Fotm=rx$>${Fw178k^xK$DpSH zN);*tESZan2U%jihM96$RWzN?qKPWpY860eMIs}ji9qBG9w_Nfa->!x>g3A!8TB7e z+UXh&CXulWF&$}27%eu9S!xxL&a_u9)rc$zEa#^jF%~~!u(2gJRF8x*4t&Th$80`X zP^rQRX#`ZD7PDO@7su?P2p_W;)lx)ZQ;RZj7TD(p6Mi+@6c8j}%t4L&C`PU6a{cW zT!({RzC~yVYPdENqDU|mZUXdk!)QWih5}45OoJiV%+^8*GJZ%Wk6Z5$&{Tw#N7^|c zO0qx%p=*>Phds$MAqI)aLNh2OHj)Z>4wHjv(}i3*m6*$pcrlri8Rcl0J{HAc=crOK z0(Bew$(Y>XkRk%yK#I$xQsH3wb2077#7Ul$P=RV8 zHJJcnB3VobK|-D&ECmD_4lWTTfmF=lj2iy7|wa+wTr?a7#ljFJn?Dw5WyWJZRZSglu*A!a@wAcG7P zzX-PaXkp=EQ+B4GswX5qlnj8gxKvk?VW2WXF&5QKkpTP% zkEMhNom%E5eO?2q(THJ>3bM$#+_)kM#F-pkif1txOa@YanA`~w>G^P30hWg9(^)hO zt{oJC3DBqG#rR~56cP$Ri9iXlP!SkQgt-D0AT*#_1=q)5JLEokN`?|ty3A&zM)eM+ zok@)lZcrqSx_BzT&PGAu09Qyjq!<&szAW$jK!i+o>b4^U<8ojSP7fgneZ|w7Kwo> zl>6l%Xbad)WY7pv$4J{>;{|z^h*2Tt%jBFO>2OA(o~R>kkB|Wvf@$T)r91|Qt&-Xz zMp(*>x+RgIRA;mb0g6=a5^DJv2XzG{s1Sh@awnoqh5493P0&>|XWSI>o7Dc4+AE@K z#4&|{7L^)&W~10`^^-{hhgR+bjkcs&2uX>!I?RrRRUBoK#Z7s9ypY<*7hB+miP|$!-k}v|2QbA*u(ewgoL@4%{C72?iL;xvjQYR#Fz=awEghRlW%SBRw z*+!-aC}Nfc(FkHTngrmHMmys3$ONSG6ru3#RDmTJv+|N;w9Om`Bngq0?}ZowbwbSI zdt6GwK-z!&2%n5?FqNctYNHAnNv~T#ic3rasz`SANj)xpD!`5LbaISmXOqzxPLhvE z(U?A|Ve^HELT&&U!W3O(u#qOWhYg`&A!d}R9Dak{A927Mi&5o`xJbj=1XF}82PFv_ z$@G!K7=m4V3eV)`0;ojFb$X&oBFYxTq`a^Yf#if-ZXmNzu|UvHMVP2HY4s@xAR=dx z`5Uhd(%=HbX9b)d!UX~bfzW3+$qh7vK|z|FMpqzYH<+}+5Z4)#;tn!08YV)*m?5E; zX;6mts==*Ye@dG2h@ClP%q*NF{M@^q9)XO6Q+$OAgY_!k~`(g zGOa!IV_RjBzgDf%h>~dMJ9Eva7UtcPWpC&TVQ=8qq9`y9EGHO{y@^Bn^D5_!Ds+GU0UB+%vkTeZp};pJqu*h1Htp6oyW zM;v(TdXk6#XKXb?MA=?vvQ0e0s##fWbIFEIZ#fCKYgE*V0^?~D+h)j0n3ri9;CAE> zV$xWH2KY!}G>Fa~G$5J`I`aoH1`TKdkUz*S5eIDngp36nXpj(z!ASrB!M~(t)-w{X z8Qiw*_;0hYGP86do2dVqg~20%x6DGq{%aEEKPLfEutf}KJ^cs3F8>CQodNhN*~EDX zAeRKx0+9SX=P!WdKK@>H=Ia@dw4BK6FTj=m0Q~yD0p?@?cm0om$%Xx&0)92atL?}; z_l-=^EmL&Q6g|kIQ|pdB$-jS77y>-(d|5>P+s8uxy{K$a7@4Vhye!rE?x^1yY?19P zIwKgygU)c&?Tq9^Vqurn?tHbSlkzWR(&4X$7G2Wuujjus%HJdZ1)@a)wI2Dun2++( z-0FW$n<2xlFTbJvYZ)1IWVLHI@a3+*CT}VK9YBjfe3N`5w-;Hon)&yg+napI%3!($ z<$cJ9+`eS-uL1qYN>=6+S_Y7kuT|~hMtE_aJi=?dj-@M;KWG!-T^5jr@d%<8}sEmLQ;N@txXr_M}IcD2gNFis0Z zYNj@TEdCS34CQ5IxTysqoqWi(Hn{IB}1s~NJd4Y7#qmNtPypKz1Pm+ zbUDLer-SUy&C1Gf6S>HivQ<{jUnloh?SG0F=vpnXS;pKvA5q^|BB~smr;UlqQU$X?V;V8QQb#sj+{Du`L=oWI{fVC z+xO<*S{qx&LGO2IDsS9&sP>w-k~#T6ymoid^oL!~sit0__B-C|j`twGxifwElIwNH zFaBDe8;*zK9k(p6d-MxW{ApEVasBx|`z_%O(`W8mL|491^tyUO-J=zK#1OI}Sml0k zcxZ0%BU^xMy7^(lM}OWDZXVZ9IJ(D+ zh8-2Z-wL%4ebaMiH|K)Xd#Qz~MGTR7!-Jonkqas4ph{IBs=Nc;yJ)L`b6Yz!zxerb z|8-YlkCp3-KV5qA>cV5+|0?;#xPo$j=ucfcz1r!Gs|y0{H-5ZPc;n`U`kb3kzkauF zn)~NHoV(dgtX+KP+j&2;_}=mc<)kH*{9@PAlhYSiTUB-GerwUZh4U7P7l_{zFKjQI zJFN#%IOgh`Zx8R-)t=RF@$uz1h!sUBr@}g_*mX0+$-B7!6D{R*?&#aGi7Su1SaE{s z{9sR0^6|8rA^Q8>mvp;I?KQL)b@=P>8}RG!?WxP^_Fb5RZ1~Y?Tl;Q~h+uRsI&ssS z)$ewNyD;zUchx{oY~z_6KfPehL#OG0<#*B@LWhP~hFAt# z-m#3d47MyPUs%3~J)o|1BQj&!gM;-K|M*dsXPJjCdh+C*yyJACBHCy)ZupjeXGDxbeN@iR6aTWp_@AwhGg)``_?)^LIV;_T_<>7sfwH*o3`y zo+!;$?Y(hMoHu^%eEE}TzkWR`p0A_zY_+@}O*VV=?IZZ}yQ3%HY5b+tRO6h-uB(g> zpZl}Q8rmlhL0_#~bxJf<*eL3@p^Gr*-2A&6dwy_YYgOUQp^a5r`jqXhxM9hgIQwLz zYFb{$d9A|(ejVTCMS1ZjkE>ocPj;x$6-`+A&MUI?S6sIX@L z-Bnv&pMG!pn7&0C_p}+OKP0Mn*ZQ2;I)^a6zw+a%+P4oD7uAV&{oLn=dHNog?p@pU zPD$;gtLbd-=?AO4Pk-E>yA3XO^{xKmF6-RK8?J81-XJ($GxzShTVypKZm~pVx;e_J z*Oll7U9Xbzsn(`O~-KM8ZL9iDg5NfcyvPaONKVB2}?=IU`;&$yi0<=IM&4%5?=OC~pM`F`UC z!Z3IKnw-Wb#Ngu6R&(yr_IDNUr(Jk9<<5}P*`sT_9{jfC*o=zK<$blE7dZ3gZ-pzD zZ7$JV_~Hkz^YP85eiMby?rIjxDvSlclvEy^z@5ADLt<*Hot%p4Z;trvyW5>jw}|R- z{I0dx&6g_0JKrg~cC2T4ab)$JNpJVK?reJcX7$>wPV~on9ghEb^Wfqg>-#H8iS;wK z6g(s1SzXF*-V5dJI8wcYW@^3M*0a-GbN7zD$7j#Bm*zB`0BiaV*_AdO8U1JM{<*B; z2d$qsbb9u9P;$m%JTk28Akj3q-kiZZ7zFIx5S7pr%UTDs5p zO2yUhpY_*n%zF~~LvrxoyZi1u`S$h7Q`V~XzT$WFSq~eIFy8*T$BVBoUtb>EbVd8S zpv&cF16O|8@y_CY^UPyA zPEAF|eKTX`wL4PB^`%h3jd=No%)27$=ApNqKDK+1P7hWry7mp{acRNzIn_tI<&7=6 zbJD8ry!;kzP1c?()>XL|gq3T#_2(wxj6-vLwXd~ViyYXqrS!t`YfAinyQ#|~f8P3( zR()tmD=$g8eI_K+(DXB$W5aXmjUwC@t zKd^6;L?0gb`n@xCXG$t(be>S_IdYL!-)czjDK&4L79ZP1ekd{Jp=aEds{WN{nm7vr z6{CK7Ft@5vz5pGu&?sHdyYx#-Qig8SG+UNcG}jY z*^gf;I)K$(m^|UgZ#9OqTRKnuIz5|HyZzd}->22>F=j`p>Nbn=cbT)c-rLo??Wsw- zU`OY6Crc@ZD)Jr|FR7Sxp5L(K$}0T*@FYaO^QZcKqtcaC%@ota`DbLN{Hy~vc0KGg z{*d6>s;|@S&UTaCrSG_1%x`l?`|GS&>7(lL#c9>7>El=zUt``(fYL0rUOgM#&Vl?RwQya zUXrW`t3o65@64$w@o-CjDK1))F2Aw!(0bge&RxEamg?u~Y9$6Mp5<`|c1&+-m44;% zma^Mx&(%-v`{L9TcJ92=69vTWsrjX<;eTGI&p*)i!6kIY4~O2puvVW_H{*kvVQaem zo;@RH4%PZ)2Ql@C@AZ!OY&WN2%#O31xoKbXx(E5qGnzQfAKa)cD!f(N&#DaC{9S(e!8GYqN*F#l>%({jBYfh9Fq_5QDAHVpzxoqy$b-RG( z5Bit-*Og9A`(H?k_f-`gyyJ)1&4bI1)L&^RJ5jnly}fyS`sD4x2kGA$${I@dHt%aL zeUyIq;$&?)-i$Vt{7?sN(3htd@^QHuLFTRN4TXEtdzwog zWt#rKd!ZEjIQ=M{E_fO_Nba)Cuiw7Ed0$<6!nzlanhHL+6aD%rS(`YKtQCHMzP|m% zu|sM7^|Z6H&_BMi@Y!?D$;QcoL+RhHrBkuR>CX4rPWeJ_;PSon)8-P3b+nLBLNTw2o5t$9s$-{*HGlBU(H z4IgY6bZ*2s+qqunI-kqgVBetKP`zQ%21?$?htm6QJ)eBEx|+sqySy*W(s9qAo}J%y z8$Hve%`6PQK;LV-K)m3@BAIZJaH|MkI9xb+!52#kk3Tma+wcl|t5yHXf!B7Oe%G%V ze4-FXim`97wRdyR@z2T5vCqvohnzE#I;d{LsSW*;C(3s$+P$Hqs-97N@w-2UDfS-4 z2A)1~l-A|5iEma^b$X)e_U!d%T|0HXN?kJ~rL6e^+lm$4-L*v)RYqr_jOOhp)301J z9<_DxO`7{FaH-QAC-u_2o7dmZU*C9VqA*`XN|mlly1}pIQ&P}Z$XDZQ7T#^$STwqJ zaC5&S_s3O-yZqXi-)W9&%9pQ+%f9oC=!nmB_c%dJSXI@(teGbG#R!;cB*<>882cQ{ zZtQq9yYso!=cG`rm#(g#6D@Zr0Vbz|^YhGm?spnABe_Yymw6Vy#JD1&I%BS9f!bc@PTuOX> zcw)A9+{ElZ-+M~t=Zc8P%m?&CBS(*G-k+BzpH!X`KJxUBx}vGh$)v_Ow7alX_Xh_r zr`w%=YQ0<5v~J6@8}%pYstJ_)gTI|ST64Vk{G*YE1$&n!Qr&C5zT3O})1!TMJv&m_ zzwQ~)*lE&()hgZy!;#Ng8|LnMkbUZnOYu$R^Bd~xW=1>TrS=;BZ4v9%w6i@XmQ=y# zCY{^7O`zI6wA1Zzv@VKHQ`i4K=b^W%zIAcs+@qFNr{|xWPJ7V*Zew)b?%od`^`ht0 zOnJmzFm26%H9z*L{_<|DeBF+^nm5bz$0Fr)rvpKBR(;siNF2^>yJ(80Dr)FEjgHO!(rq>^} zOLz|lKb|u2dCvzO6KCsHw@d1N_))d`<1e=8*W|<|jrwNoVd=!JL$8@uoY*;ISoP?l z#&-^GJAS48!E3YYoV$pQ?8K4bIdS;S#!o!sdL62mkjhOUcGrSp*R@dD?$wPsjl%gt z$u}#5%X*%DRW)+=x;rnPj(<$A4_8Sx&JKBA+?R~(x9;ekzj9(J>p~Yd9ur%&&s`G&ZlJ zJ<7S4xActpsXDc&>yL+?p9ZOWx?laS_?P_Z(tD~I-|^<2x>d&86Q>)NRWvlcJ$(tb z;>4Yk6BhO;sW@XjIC??i7O}q#KKaCh=S0D4-38X=kA7_u;-%M3wGI1EJjfjyivKdF zX;Wim$ANbyTwVQBgFTDoZqu{?u6g_V!1wcOhEu-T8C*J59_YXI`tAV*x91SZEY8#? z_xm2a^6pB?lX%u7)%T6(cJ*xcalc)%*%Rltt!;!?=PctEl=ta5?ocRlHhWt>x@={K zd!mt>haQ@>=kx7rk<#xcez@+Tb;7pYTP6~_UUDO<6FzK4cMFL12Md#P>JneQ)ARc1 zJky+^lq&4a;*sASOA@2o{O#w|UK*OyFs<~%rk%IOwSBO7LTzus-7&wPTwBx5+cnYs z*&FEjvJXx!`etKo-h-Zr$G6(lXOvlIED~qj zkxvO^Hs?as7d^!eGaPTi!>c}cUhU8`;dD6htd%ZOOk8H{28g+we;CN z)8oOUU1WQ$3ci_m?=k7I);VUB_UW{y&yW)kp?-I0#S?5qakrb+vBkGRrOcJ3loMgIjulf;Te=x@ZO4yp@JOohkJ@phHs?%Gd0U=FTau=&o? z@A`e!8!fxKf6mW~c$DSe{C@e?=oue(Uv$2H&y!7@e$S5Y@mA5gsh&OFQJ%VbW#5oQ z`odUsm(k0Ls{TY@uhzDIHvGfb7pLq^%E2cB+nnbQm2QNO)&n!HFV`KE9UaqjNSt?V zc;b4aw6KP^qpCb-GzXg~9Z=YH;X4aQf23Hudl>0lsS8&m)*35fGfF?}6vBsf8U5~$ z*=O1`)m9HGU-9Y_ep7C^?!mM@!8DaqGwb+&hzh-O^rfiKq)Dz ztv`^^dM(L&_ox!+*|F`$Sw{vxc{Q)q2fh0e>PRu=U zYsZeiqE^k7MBe+p)4se*rr$1I#(e8PK5@}^%e$&P4AdOLDnlN-+b+2q95eZf``+2j z5A$JP-f!5w;)xHu`R`oK-(45-+EsPeK4q1Te9^b0cHmE`$BmZ<94cN?_g(dgmC%dHh%w{xVUS> z{=xUZ?0E3voxIYq2NpDf=|{P-HEn8Cr3D+5U9y@k?0^0KSMBeX6br_!+nd#t3~ZhR zk1NzIZoYhX=aT>56|Xe(mz8CqV_Mf-|FZel%WZ2WuPknTc5mmq=^q-559sUD2W#F6 z?oEzMf3PIK(-+IvEE)Bva_SUwic!DMDV$naXy5oL$kJ^6cuVu)oJn$3`*nxJd+VCD zy*qVkOJ%JQ*VW|*C#S;o7Y0ch@u@Q_XWdAh`mOm&(;uJJ2&;|_xj$p)v3@-pA6R>8 z7KQphQjN{I*1oKFNvG8F(zLVx2w!mW&!t1^zMf>9fv?)pfj9W4ozK2L8!k%Z77SIO z-@lmjDqiXBo!YT-&g9;woAy5zj5-NcC$A;eKq;Tda6Y}(*?CRB zA5Hgl-|293Zr;@gf21eiFWbHH=$s8$h1ompV$m0c zQty+A>mPx|>lCS_(I1}FjB9=UOwUmjGe$8V)wP-ZdEejE;<50+>2{)ijQenX&)Wqh zoDL%&2`4WP%*>g)@T&&_cHS7JMbc~BedzM$z0^S?yXFtMa96F6##DXp zE}i`I;`)XW_qN=)aB|bRN%_#?efS}B;aA(0j|!Fk(%Cf&k=pB@aMiA zA9?G7gKxieKL0-R(dV;(J$pACJ{0mlIa@U3eDWiE=VjB)3;W)Gv~??nsS2;lJizaUp9Q_D=C4KRi>O;+gpM5)j_RR-t zN(7H%r>9#?{XT8`>yH=Sk8uJ1mFojz{(g^^o*MS6tG@T=xb(%_@9!_@##*VFb^p&c zCr9_`s<~$Ac3?-h=La`TO53ClKYV}x&d{07mp&Pt{AG9NvfO)>Rbxwkf1k6y+w+>` z@nhRo=wEwv>JIzkqHk_%A1**gl}&e!t+NNRo5y`W>W6`w=j(a>8~T#?-mM6~w`|Py zML+Muc2@2iRBm;Sdz14yw|VTjw{y}5dir1E%X_He(T~a)^{-xJNl>xpBP0t7Cw{*(o8HOk zZF@dt*0j{;yTNJOss>g)Dd^IC;c(|oWx9vcb8iF2zUb7?4t^pSH{wNEQF`C!-|SrW z5Z(Ocm}T*;6<1$-wL`jVZOPseu)+NO#FF_3cW6&G&i&=g(9X?6D+`yrmmFHO->*A4 z@p0Gebk~}ay%VJk@+Bt^3@h5-$v}n>a>m>KDEzXybe*g4i^Xuw`=#f;?B6`}&w{4u z{uNV$%bw7ephZ8Pm{DIcGySyVVfmv2%-m2a+M3Jg4ccj?bB4k$$KZYW zKI8M#`sB^({(I64s$}2Mi63sAzn{-rynMo!%f?fG>zuBrE1Y}zqlL#xx$7rfQzy4C z^FJvNr=5#$A;0EuhV`op&kw&jjF+5V^!wy?>550`s~ehkynpJzH|y7S-}-_$*s7s$ zys>EW4}B<+7xVkgxxfmf!{0M%f9R7wTA5o>F#Ex-G5543qibp`hx1}{BOQKR*Z2;- z`BZ6hO`nHsR^hzxntt@UuD6Tle8ju3H@S!XXv5*UwI^%8ztman`U+~Z@Os6k?mH8( zp7uu@u|?ayN7|h)`waPt_NZYLutjO$m0QP`SGzAJJ{efC@j~s}lPw>`r}ya9xf;#W zpZZogy~DT*eTyfWv=??%^5@*&w7jC%_DN}#XL_sX!)Au+l5;vVqsY|Zhe;)N-Iy;* zY8$t8Sh25m%IY56$!EHp{V9Fy?DfIc>T-GC)pC5Rr1m+i>GEcJ_bJW3qM^UBrOuT< zP8*j$v}V;`$@!Su&%UKIZ^y=E%->EgH=`eXw8*vk(bL$Oi!1k^cy?>Sw%1I-Ce`{|&3XEA%P)7bcHRJr zepwBSZ)R7P9rW)#eRZAhbTx0(^sa4~w_DW@9$U7j-nXNhcR4Rna&hCTnGJ!dPhurC z%YM(9aOEyBvh2Y5K9k$uoK=#YeZp1$H6e1!Tp)=B-f7Nudvh+jR(>^_(H1^q?pX7R21nfut8FJOzXEIfDm!oL;wwXrq^o7}S-`%pc2R=X1xhSZr{q z8F(Fr=q7|jkd5v|QOqiJE?ogrkdrW&^g^@Ltn0h=^;#qA)CkVW-7!iIWyL z(<^fuoBHG2a9d~RL~;?7%Ej5Ba954nWIJ#1GqirQrd}7A`Zs+AS2_Tcrk*B^8#QZpKv)MN<3lJhC&Gj4`tgm86_L! zNddnnfTYx+C~Q%tv{5&t4)D}CX|@Y-uh|~48&X1}9T5X=7-T>`my#K`d3`X`1#t*> zAnq3ggKJT%3NuDntQICIL3kObIL&kO zC2p_D76zpGK+1`bJPDDsvltmnE%8bO0nm%Uh&ZBD#${$5FBA==EqV;rMUj|RhUs-G z3n}0km@x&Waish~(w*=Vs(@ZE_G4@!mf|IGUYMOuVw3{0Mgf<_%)(uIbw=mYsSKn6 zHUv!(KZ27yg5*lA8Z3ihGDyaaKo(OJ*4opcTrM=Rv_=g-MIfF;KE%gh0zq^>w~NsVhTqT zPy)8JSQvy-AqC6tBy4Ui*A=tM!;Gj%W9NxHArgu*eSU~kV4{R54C?tlCCQ=!mN3Lc z0vw19veXKlqD>{4;+o?gJ?sWGDj$~-v8ci+ja(#%Bd|-z=QzTk#$qOLlhDD@K_dFl zMtxi;i^D=kNRaOjlSYCo=CY$em<&4sKZfwNXfPQ~x!7Vd=>?K*IA{TE`nWw6q6D~;xKVF5C$9dID#{U zD2pKv#=U?*=gLT&dMJUa*n(h2D8+R;$Yz2W8IRbIjH@gbgBC*!sSF;~;e0a^OjsDf4^m zT7%AklRKDNgXV`luo+7 zgu)yYf|jI4?j|i>tyRsX^nlI^vQV~Ojz%F3KWv2f7A{IAL~N$Wj-`CoG-OqqjHDRC z0}gQl=P+bR0b;WPZYNJhaN$%^gQ#pQMlc`X5n>Na7YN#9^Ud85IFCE2v=@^gJ1o@#_KjIi%?-i61Hi?8FeBQ@Z%Ye-9~DtFk$221~pIO&hU92z1$m7kU4)re z^0dP#na3(3tST6136)UNU}7Uq0l=|1GXU43wW(oN0%sb6WW<~HdsyZ)7fNu+813d9 zDBozySE3o7lYS^~%I`rKv{%^;Xn^mN^Ndl-nF%q)0V6F-LTrUms1q4*E>kG8%fdj) zrt;B%%7R`qDR*a>jJP!cqjrriVUng@Qk5I`O47DJh63>Y@4MP^+YwK*XvDHH0nddPur)PN15aGNM2ghhzfj><%k(+6sTB8XsO z$p|N@g|vFwrMVH09)ejezsPM0O6XWl8yWn3Kt|{9ls}+z!$Kc}7qsX}r#bCJJw5;? z4Eb7{h_*RjP8&w!1{4ghMd}OZYm!`_&lJN!0_feaMlx&TrNrvspsl$dm;d`Kk^;h;LrCt?f$Ok3@WRFrn# z1pVJ&N*OMX7WF9eT|Su(Ny6TYN?}F9Y_(6%z_r#SJE3y&%}HC*1g5;GCl*n8{cSZTWH6aEdIeWxlgSDO4+IJ)0FFeQ2nT5* zQrc-i!T+vROP3BFTtN(&k=tQnPEO9m(x-VVa@&`d4n$r#Me|tyoE%5{iu!@MFXb{z zuMHNq^K#gwqlOI3WtA$1Xmi=6pANC+f~60Kz;Cvvlzt6wdx1aLD`ju6RNxC=ZRDID` z_0lUd&nB0Ro>|(S;#ACD)T`$vYHIYqCf9#bbME)+1Cw7;GykFP&|&T;)IeeH-bd!^ zdv9Ml{f9@zHO0qRZ?nGGyjON=cE@*O4bAVZE-pzW(N2>yrsHSKXupRYtUD z)sJ87ESkyt02Hh9V?z@*S+Qn)DIX$ zU4FcdPB7ee}qO-HtD3 ze|~aQ9B(aSonGbqXr!y3^L(MJVZCCQ<6u(qEc4;}_unlu+mEl?v1!vN|M73{??pC& zhev^9*!3Jx^7|PR*7d!Q#vko|w3gqncYS~wvGTaZscHJ+HlwER_S0R8PwuQ)pg1`} zJ$IX_-IUJc*$xfz;r=47~zzwGtr0;gF=+BGh6ZS+{ys48Pgq^GPeVY$oVP>*ik~IHn6YW$rf*qF2Nr4oczYk z^P1ZH6M2*)`+h;sN8PQ8?W?D%_u~crI}ePZ70;H8Jwfza>)&^6an<&@M+;*}ta)BR z&1S}mNfiU`rAOIZMe9zCy7cnRzU!+lG+rrg|LDh`HFnMHX&ug+PY!#?dDL~!$r9nm z+;112IrpggvGl!=QWn)#;bt)U;v=O{`R#fr0 zs^={VU3#<)sOD#y+!J*`Q|lg9&Eu-KM)Y2GYuLuQmx~U+1x`70@IlqWn!~NUcaquq z@lL4k)@*b}X!f(k-`sAk#jceu)9xNtTa+5x)M^20zx!rGnnp2+2`oC&*Zz|hI z>ni;C=}oH8eSPw{3Fot;?{CXa6UO$}_p4ldld2wn?Htwm_*Ht}26pkMW3N4}gYVy1 zb+W1B?b4$Ajb9Er+Wqpdlf&OF$VR?faPegS4I<;+HPnd2%ik9^zkdCOcKm`hvw9X~ zmu+GlIaM`uMSA9IkD7Wn?*}T6uc8jM%nnaMxc6V@XzTRTMy54RKuNc3* zWNOzVg?6NpYzX<20Cot?lV-EeJK;Y&v41r+ z>cH0n#NY4v9lkeX{>*N(=3l8Poxl2()((Z+20pj~O<2Bq)7DG>4EJux?5zvEgFiR;c^%JK-yeWo0!$W0}%b()d9=|F`$W zgO^H&_LxU^6x}aeXE)5$uk5#^>o;dpX@>^*2s#`*Vm}KI`NzmKK==pb`X3Z_o=xb$T5<$u-f9KZU` zkDoTI9pc&Y`24KomQrf-n#+qSw@lxA^`lTr%jAwHZyt>x`}#K(*_Wdqp2+)bb*~Z4 zbHerOKUrM3pyR!ZeeW0buL%!$cw+01`(__&ZhxR+@9mPS?6XZhK09kaa(DaE7T4#Y z7EklbJ2zXrZo`;z*U0`Y1Hi=T^b-3IA*@_+`TMKeZn%F1WbZ)u*|mZpZG|Scl$te*Iks)GeVr>t+vC{>fbO zmj#u>)u(>xwfvjc{wSP-&UyTqsb;t2Z0)COY9sIN+g1|p_d!AN;=M;2yLX#iR@a;~ zXz$eRU{vm!aJsp^U_r}@4VsFg6Vw6SXDyZ8uI!o~oV9e#Gn1=20e^OT{^nO6b-sFb z7dy~$Ch_RfS?;zo%h&V3RNj>fKd!EulIZ<~WlNylv@;u?7PXAN^yG)#9dk=EyZYVgxAD$O14Wrtk&Xif{2 z%To0#KJ);3_tp8`TdwOXZ#|k`_+{d!<_51@@SM;gw9Qn2W$my3)#08Dz%y;iKdv`wJJ^g%5wPaS|sWIQXRy=t& zE6uu+oqOS(1)C%HJGN%O&TBq3@8Id|xUOVnw`bYktPS|TZv6HvyTt{M+`rvAKD%t<8 diff --git a/logo.png b/logo.png index 5434f8de511dabc5eb98f9cb7ea86925639839a5..38ceaf6ba576f3def8ab049db1dd5fddcbe9853a 100644 GIT binary patch literal 5671 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 N002ovPDHLkV1k{Bs#5>} delta 2445 zcmV;833B$QET$77iBL{Q4GJ0x0000DNk~Le0000$0000$2nGNE0IF$m-jN|Re+fHD zL_t(|Ugev6a8y?v$AA0Y&F&@}@*)X|KqH+>6Kxy`gB1B*+g_ePtTAnQr14TrFG+FW@WRuN4ve~`a-Rtjn_MGJI zW&_!9@21&)W`1+;IeYiq`}^MCe|g?};ggPzZ!<;tzp0j?HZtE5%Ke*?$;H#L`joBs zeBf7XqRjCAvJ z%otFN-Xlkj{1APpKr0|$xKFnffjPf=^=gOD=X;HpH)CmQYx`SORn;Bn6Gg+MM4(Wy z=7RHrD_5>GqfhhEgb3tgT1Xi)g+2do&aijy-e=IaxoA`!s7**41qN#HW@4Sc6+=Tq zo|>AP#polo3Dhu-s|xJye^YDE|C4hxH#cuYAMZq?s=#^%WnG|sV_{+8qlskhQCnO4 z0B-Wps2!lOj7}*4MS#(2wSG2{%stA=%4%?<6ks$0$axk4CX;Cn%gI4pE*FKq18tlD z1c^WmL#~sDM)jXHf~f*1)42*c&+a~%aG0D|ZZ#)z&I8^J$C*XWfA{m;tRNY2Z0yQLr?842sMAiOTp;DGO6s$7q)JWe`>uztUCz3E8cbz%}T5wYawIqv+wwW1&J)3=3lMb&q2R>^o-;<_ zON$|PEeOF^$GSsHLn&ClJbr2-p)hKpngFJSG|x!Je|UEx-vfyEg<C4$y#gx&qDP2SWjS5lp!#tIoDKCO#s(R_kvzgFD+lH1jqO9;wgZ^=T3p% zZiM`&?%_G($$z>Y3@!`!Q3QegvAbAV0z-ujX5qQihJ>)8mD9?}REZCb$Xzu%aKq_XK8YNDzD>7c$m z{9X^t`aO!S5M@H}7}u7iY_u3k=~c8qQvu>Qe-7~e^d#87vj8KYjOX4OOMNle*DU~V z;|Y*M^mtD@G!?+V`8>ouVQ~HC3p{7?xL#<0xK9G#%jbEHHfSaQ4P65p&q4mPpU0M) zmf4(r?ui)5V3Fxg;Z?$!1J-9YDu(F16vP5O8-6p6efOK&HxVEyb6IW z|K_O#mgQAY_V!Ai$_&kBgI(3zA=Z(de`PIWwF4^L-{Psv&`bcD&MFr$2qQLNu2+__ zS>05SuKHo%@uLv??;y`fKv7k^GkH2aSu_(M+7p7lM-H&MN)?MOhzyTF=s-teL8NJE z+F4*a;@$}Ou?wYTw7hT3!@^|>4Xwo8GfA-4J zt^m)F<>5n}a`(cW@-^FQviGU?<(OaMzoa1+mjl}_%N?bEmU|ZMmcu7{_z$ui?F_K8 zm6NQgfIcQohE$7yn?WlOto)@l5qe6@VPi z8ipb(%-V7vSneG^F)}YHW#fM>oli$r1rQi2=oOu0j5utb4yHu_M`JB}AUX=}I~%k5 zVv1O5QEw!eDfD8rfDcVXz_>=AqJYM!6>hhC zFBfmdgEy6yl~n*^Y`uB_w!IFgs5{j~YB0{LpfB1Z@P34S>)XH@jdV z0x2ehAO(d9=aUpgW3nZJvIVDo@x>^KK&`wm;dt6FNGEf#Bmx~rj*`Q|C@p@=meUhK zPLYv=LI`1E+)uxaW3m@6oFpTsg^B-9wj8YxcU3qlOb8=>PXXZn^DmRPRR=0300000 LNkvXXu0mjf1wE1t diff --git a/src/GraphQL.Query.Builder/QueryStringBuilder.cs b/src/GraphQL.Query.Builder/QueryStringBuilder.cs index ab8a100..71ec0a3 100644 --- a/src/GraphQL.Query.Builder/QueryStringBuilder.cs +++ b/src/GraphQL.Query.Builder/QueryStringBuilder.cs @@ -45,6 +45,7 @@ public void Clear() /// - Key value pair: `foo:"bar"` or `foo:10` ... /// - List: `["foo","bar"]` or `[1,2]` ... /// - Dictionary: `{foo:"bar",b:10}` + /// - Object: `{foo:"bar",b:10}` /// /// /// The formatted query param. @@ -54,7 +55,8 @@ internal protected virtual string FormatQueryParam(object value) switch (value) { case string strValue: - return "\"" + strValue + "\""; + string encoded = strValue.Replace("\"", "\\\""); + return $"\"{encoded}\""; case byte byteValue: return byteValue.ToString(); diff --git a/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs b/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs index 72cd413..5bee1fe 100644 --- a/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs +++ b/tests/GraphQL.Query.Builder.UnitTests/QueryStringBuilderTests.cs @@ -21,6 +21,15 @@ public void TestFormatQueryParam_string() Assert.Equal("\"value\"", new QueryStringBuilder().FormatQueryParam(value)); } + [Fact] + public void TestFormatQueryParam_string_json() + { + string value = "{\"foo\":\"bar\",\"array\":[1,2]}"; + Assert.Equal( + "\"{\\\"foo\\\":\\\"bar\\\",\\\"array\\\":[1,2]}\"", + new QueryStringBuilder().FormatQueryParam(value)); + } + [Fact] public void TestFormatQueryParam_byte() { @@ -265,7 +274,7 @@ public void TestFormatQueryParam_Object() }; Assert.Equal("{Age:10,Name:\"Test\",Orders:[{Product:{load:{weight:45},name:\"Truck 1\",wheelsNumber:6}}]}", new QueryStringBuilder().FormatQueryParam(@object)); - + // with inner object with null property @object = new Customer {