<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Πρώτα Βήματα - Αρχές προγραμματισμού</title><link>https://www.dotnetzone.gr:443/cs/forums/72/ShowForum.aspx</link><description>Αναρωτιέστε τι σημαίνει object; Class; Inheritance; Design pattern; Την απάντηση μπορείτε να την βρείτε εδώ!</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: c# HttpClient</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75856.aspx</link><pubDate>Mon, 27 Oct 2014 00:52:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75856</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75856.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=75856</wfw:commentRss><description>&lt;p&gt;Εγώ θα το έγγραφα κάπως έτσι:&lt;/p&gt;&lt;p&gt;public async Task&amp;lt;ResultObject&amp;gt; Test(string username, string password, string start_date, string status_id)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;string apiPath = "booking/index?start_date={0}&amp;amp;status_id={1}";&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;string AuthenticationToken = string.Format("{0}:{1}", username, password);&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;using (var client = new HttpClient())&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;{&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;client.BaseAddress = new Uri("https://demo.checkfront.com/api/3.0/");&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US"));&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(AuthenticationToken)));&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, string.Format(apiPath, start_date, status_id));&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;try&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;{&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;HttpResponseMessage response = await client.SendAsync(req);&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;response.EnsureSuccessStatusCode();&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;string responseText = await response.Content.ReadAsStringAsync();&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;ResultObject result = JsonConvert.DeserializeObject&amp;lt;ResultObject&amp;gt;(responseText);&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;return result;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;}&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;catch (HttpRequestException ex)&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;{&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;throw ex;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;}&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;catch (Exception ex)&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;{&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;			&lt;/span&gt;throw ex;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;		&lt;/span&gt;}&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre;"&gt;	&lt;/span&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;Το&amp;nbsp;&lt;span style="font-size:10pt;"&gt;ResultObject είναι η κλάση του αντικειμένου που περιμένεις για απάντηση - υποθέτω ότι έιναι αντικείμενο, μπορεί να είναι κάτι άλλο. Τις παραμέτρους που περνάω στην μέθοδο τις καταλαβαίνεις.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Εγώ είμαι εγώ - δεν μου αρέσει το concatenation των strings, θέλω να είμαι safe από injection, θέλω η μέθοδός μου να είναι testable και πολλά άλλα παράξενα. Το τροποποιείς κατά βούλιση...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;George J.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: c# HttpClient</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75855.aspx</link><pubDate>Sun, 26 Oct 2014 23:16:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75855</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75855.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=75855</wfw:commentRss><description>&lt;p&gt;Συγνώμη αλλα δεν το εχω.&lt;/p&gt;

&lt;p&gt;var http = new HttpClient();&lt;br&gt;http.DefaultRequestHeaders.Accept.Clear();&lt;br&gt;http.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));&lt;br&gt;HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, apiPath);&lt;br&gt;http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("username:pass")));&lt;br&gt;try&lt;br&gt;{&lt;br&gt;&amp;nbsp;HttpResponseMessage response = await http.SendAsync(req);&lt;br&gt;&amp;nbsp;if (response.EnsureSuccessStatusCode().StatusCode.ToString() == "OK")&lt;br&gt;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;Task&amp;lt;HttpResponseMessage&amp;gt; message = http.GetAsync(apiPath + "booking/index" );&lt;br&gt;&amp;nbsp;&amp;nbsp;String result = message.Result.Content.ReadAsStringAsync().Result;&lt;br&gt;&amp;nbsp;&amp;nbsp;JObject obj = JObject.Parse(result);&lt;br&gt;&amp;nbsp;}&lt;br&gt;}&lt;br&gt;catch (HttpRequestException ex)&lt;br&gt;{&lt;br&gt;&amp;nbsp;throw ex;&lt;br&gt;}&lt;br&gt;catch (Exception ex)&lt;br&gt;{&lt;br&gt;&amp;nbsp;throw ex;&lt;br&gt;}&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Τι βαζω στο &amp;nbsp;"message" ή πρέπει καπου αλλού;&lt;/p&gt;
Αν το βαλω έτσι, παιζει μια χαρα:
&lt;br&gt;
string q1 = "?status_id=PEND";
&lt;br&gt;
string mq = apiPath + "booking/index" + q1;
&lt;br&gt;
Task message = http.GetAsync(mq);
&lt;br&gt;
String result = message.Result.Content.ReadAsStringAsync().Result;
&lt;br&gt;
JObject obj = JObject.Parse(result);
&lt;p&gt;&lt;br&gt;&lt;/p&gt;</description></item><item><title>Απ: c# HttpClient</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75853.aspx</link><pubDate>Sun, 26 Oct 2014 19:31:37 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75853</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75853.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=75853</wfw:commentRss><description>&lt;ol&gt;&lt;li&gt;Στην C# μπορείς να χρησιμοποιήσεις το &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection(v=vs.110).aspx" target="_blank"&gt;NameValueCollection class&lt;/a&gt; που με την .ToString() μπορείς να πάρεις το μέρος του url που είναι μετά το "?" χωρίς το "?". Αφού έχεις θέσει το BaseAddress το relative url που χρειάζεσαι είναι "index?" + nameValueCollection.ToString() για να το περάσεις στην μέθοδο GetAsync(). Προσωπικά θα σου πρότεινα να χρησιμοποιήσεις κάτι σαν αυτό για την κλήση του web service:&lt;br&gt;&lt;br&gt;var client = new HttpClient();&lt;br&gt;HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Get, apiPath);&lt;br&gt;try&lt;br&gt;{&lt;br&gt;&amp;nbsp;HttpResponseMessage response = await client.SendAsync(req);&lt;br&gt;&amp;nbsp;response.EnsureSuccessStatusCode();&lt;br&gt;&lt;br&gt;&amp;nbsp;return true;&lt;br&gt;}&lt;br&gt;catch (HttpRequestException ex)&lt;br&gt;{&lt;br&gt;&amp;nbsp;throw ex;&lt;br&gt;}&lt;br&gt;catch (Exception ex)&lt;br&gt;{&lt;br&gt;&amp;nbsp;throw ex;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;2. Αυτά που περιγράφεις είναι το Asynchronous pattern, που πλέον - λίγο ως πολύ - είναι obsolete, γιατί όλα έχουν γυρίσει να χρησιμοποιούν Tasks. Το HttpClient είναι βασισμένο σε χρήση των Tasks.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;George J.&amp;nbsp;&lt;/p&gt;</description></item><item><title>c# HttpClient</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75850.aspx</link><pubDate>Sun, 26 Oct 2014 18:24:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75850</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75850.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=75850</wfw:commentRss><description>&lt;P&gt;γεια σας παιδιά,&lt;/P&gt;
&lt;P&gt;φτιαχνω ενα connection μεταξυ ενος web site και μιας τοπικής Βάσης δεδομένων.&lt;/P&gt;
&lt;P&gt;Η ερώτηση μου ειναι ως προς το web request&lt;/P&gt;
&lt;P&gt;ο κατασκευαστης εχει ενα παραδειγμα:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;using (var http = new HttpClient())&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;http.DefaultRequestHeaders.Accept.Clear();&lt;BR&gt;&amp;nbsp;http.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));&lt;BR&gt;&amp;nbsp;http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("username:password")));&lt;BR&gt;&amp;nbsp;http.BaseAddress = new Uri("&lt;A href="https://demo.checkfront.com/api/3.0/"&gt;https://demo.checkfront.com/api/3.0/&lt;/A&gt;");&lt;BR&gt;&amp;nbsp;Task&amp;lt;HttpResponseMessage&amp;gt; message = http.GetAsync("booking/index");&lt;BR&gt;&amp;nbsp;String result = message.Result.Content.ReadAsStringAsync().Result;&lt;BR&gt;&amp;nbsp;JObject obj = JObject.Parse(result);&lt;BR&gt;}&lt;/P&gt;
&lt;P&gt;1 ερώτηση. Λέει ο κατασκευαστής:&lt;/P&gt;
&lt;P&gt;For example, instead of manually building a query string in a request such as:&lt;BR&gt;demo.checkfront.com/api/3.0/booking/index?start_date=today&amp;amp;status_id=PAID HTTP/1.1&lt;/P&gt;
&lt;P&gt;You could instead use:&lt;/P&gt;
&lt;P&gt;$data = array(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'start_date'=&amp;gt;'today',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'status_id'=&amp;gt;'PAID'&lt;BR&gt;);&lt;BR&gt;Checkfront-&amp;gt;get('booking/index',$data);&lt;/P&gt;
&lt;P&gt;αυτό πως μπορώ να το "μεταφράσω" σε c# και να περάσω την παραμετρο $data στην HttpClient που εχω;&lt;/P&gt;
&lt;P&gt;2 ερώτηση. Το παράδειγμα που δεινει, ειναι asynchronous ή όχι;&lt;/P&gt;
&lt;P&gt;που ειναι η BeginGetRequestStream&amp;nbsp;, BeginGetResponse, GetResponseCallback;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>