Kommunikáció a szerverrel

Opcionális kiegészítő: modernhttpclient-updated

using System.Collections.Generic; // Szótárak kezelése

using System.Net.Http; // Szerverrel történő kummunikáció

using ModernHttpClient; // Ha használjuk a kiegészítőt

 
Kiegészítő nélkül
- Header értékeket a szerver oldalon le lehet olvasni.
// Új HTTP kliens létrehozása
private static readonly HttpClient client = new HttpClient();
 
Kiegészítő által javítva
- Header értékeket a szerver oldalon nem lehet leolvasni.
// Új HTTP kliens létrehozása
private static readonly HttpClient client = new HttpClient(new NativeMessageHandler());
 
Android esetén, ha HTTP a forrás
- Projekt.Android > Properties > AssemblyInfo.cs fájl végén az alábbi sort kell behelyezni:
[assembly: Application(UsesCleartextTraffic = true)]
 
iOS esetén, ha HTTP a forrás
- Projekt.iOS > info.plist fájl esetén az alábbi sorok behelyezése
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>...engedélyezendő HTTP oldal elérése...</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
 
Mintapélda
// Belépési adatokat ellenőrző függvény
async Task CheckLoginAsync(string login, string pswd)
{
 
    // Átküldendő értékekből egy POST adathalmaz létrehozása
    var values = new Dictionary<string, string>
    {
        { "login", login },
        { "pswd", pswd },
    };
    var content = new FormUrlEncodedContent(values);
 
    try
    {
 
        // Kérés a szerver felé    
        HttpResponseMessage response = await client.PostAsync("http://www.oldal.hu/login/", content);
 
        // Szerver válasza
        String responseString = await response.Content.ReadAsStringAsync();
 
        // TOVÁBBI KÓDOK SIKERES MŰVELET ESETÉN
    } catch (Exception err) {
        
        // Hiba kiíratása konzolra
        Console.WriteLine(err.Message);
 
        // TOVÁBBI KÓDOK SIKERTELEN MŰVELET ESETÉN
    }
}
 
FormUrlEncodedContent módosított verziója
- FormUrlEncodedContent esetén az URL által alkalmazott karakterszám korlátozás miatt nagyobb POST-ok elküldésére alkalmatlan, így saját függvényt kell alkalmazni helyette.
public class MyFormUrlEncodedContent : ByteArrayContent
{
    public MyFormUrlEncodedContent(IEnumerable<KeyValuePair<string, string>> nameValueCollection) : base(MyFormUrlEncodedContent.GetContentByteArray(nameValueCollection))
    {
        base.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
    }
 
    private static byte[] GetContentByteArray(IEnumerable<KeyValuePair<string, string>> nameValueCollection)
    {
        if (nameValueCollection == null)
        {
            throw new ArgumentNullException("nameValueCollection");
        }
 
        StringBuilder stringBuilder = new StringBuilder();
        foreach (KeyValuePair<string, string> current in nameValueCollection)
        {
            if (stringBuilder.Length > 0)
            {
                stringBuilder.Append('&');
            }
 
           stringBuilder.Append(MyFormUrlEncodedContent.Encode(current.Key));
           stringBuilder.Append('=');
            stringBuilder.Append(MyFormUrlEncodedContent.Encode(current.Value));
        }
        return Encoding.Default.GetBytes(stringBuilder.ToString());
    }
 
    private static string Encode(string data)
    {
        if (string.IsNullOrEmpty(data))  {  return string.Empty;  }
        return System.Net.WebUtility.UrlEncode(data).Replace("%20", "+");
     }
}

 

Mobilos kategóriák: