.NET 3.5 Compact FrameWork İle WebApi Çağırma | C#

Merhaba, .NET 3.5 CF ile yazdığımız bir el terminali uygulaması var.
Ona WebApi desteği eklemek istedim. İlerleyen zamanda Android uygulamaya geçtiğimizde de kullanabileceğimiz bir yapı olması açısından.
Öncelikle Newtonsoft’un aşağıdaki DLL’ine ihtiyacımız var.
Bunu uygulamanın bulunduğu dizine atıp referanslardan eklememiz gerekiyor:

https://github.com/JamesNK/Newtonsoft.Json/releases/download/3.5.8/Json35r8.zip

Sonrasında da aşağıdaki şekilde bir isteğe dönen cevabı yöneteceğimiz class lazım:

    [Serializable]
    public class DtoTemel
    {
        public bool Statu { get; set; }
        public string JsonData { get; set; }
    }

Sonrasında da isteği ilgili adrese iletecek bir metot lazım:

public static DtoTemel ApiIstekGonder(string apiAdres, string strJsonParam, string metot)
	{
		DtoTemel dto = new DtoTemel();
		HttpWebRequest hwrequest;
		HttpWebResponse hwresponse = null;
		try
		{
			hwrequest = (HttpWebRequest)WebRequest.Create(apiAdres);
			hwrequest.Method = metot;
			if (metot == "POST")
			{
				hwrequest.AllowWriteStreamBuffering = true;
				hwrequest.KeepAlive = false;
				hwrequest.Credentials = CredentialCache.DefaultCredentials;
				hwrequest.ContentType = "application/json; charset=UTF-8";
				hwrequest.SendChunked = false;
				hwrequest.UserAgent = "Zamkinos mobile user agent";
				hwrequest.ReadWriteTimeout = 100000;
				hwrequest.Timeout = 100000;
				hwrequest.Headers["Token"] = GenelIslemler.GecerliKullanici == null ? "" : GenelIslemler.GecerliKullanici.Id == 0 ? "" : GenelIslemler.GecerliKullanici.SifreToken;
				byte[] postData = Encoding.UTF8.GetBytes(strJsonParam);
				if (postData != null)
				{
					hwrequest.ContentLength = postData.Length;
					using (var dataStream = hwrequest.GetRequestStream())
					{
						dataStream.Write(postData, 0, postData.Length);
					}
				}
			}
			else
			{
				hwrequest.Headers["Token"] = GenelIslemler.GecerliKullanici == null ? "" : GenelIslemler.GecerliKullanici.SifreToken;
			}
			hwresponse = (HttpWebResponse)hwrequest.GetResponse();
			using (Stream dataStream = hwresponse.GetResponseStream())
			{
				StreamReader myStreamReader = new StreamReader(dataStream);
				string s = myStreamReader.ReadToEnd();
				// Asagidakini yapmaya mecbur kaldim...
				s = s.Replace(@"\", "");
				s = s.Remove(s.Length - 1, 1);
				s = s.Remove(0, 1);
				JObject o = (JObject)JsonConvert.DeserializeObject(s);
				dto.Statu = (bool)o["Statu"];
				dto.JsonData = o["JsonData"].ToString();
			}
		}
		catch (WebException ex)
		{
			MessageBox.Show("1: " + ex.Message);
			dto.JsonData = "An error occurred: " + (new StreamReader(ex.Response.GetResponseStream(), true)).ReadToEnd();
		}
		catch (Exception e)
		{
			MessageBox.Show("2: " + e.Message);
			dto.JsonData = "An error occurred: " + e.Message;
		}
		finally
		{
			if (hwresponse != null)
			{
				hwresponse.Close();
			}
			hwrequest = null;
			hwresponse = null;
		}
		return dto;
	}

Şu şekilde çağırabiliriz:

        public void KullaniciKontrol(Kullanici pKullanici)
        {
            try
            {
                DtoTemel dto = WebApiIslemleri.ApiIstekGonder(Sabitler.WebApiAdresi + "Giris/GetirKullanici", JsonConvert.SerializeObject(pKullanici), "POST");
                if (dto.Statu)
                {
                    Kullanici obj = JsonConvert.DeserializeObject<Kullanici>(dto.JsonData);
                    GenelIslemler.GecerliKullanici = new Kullanici()
                    {
                        Id = Convert.ToByte(obj.FirmaKodu),
                        Sifre = pKullanici.Sifre,
                        KullaniciAdi = obj.KullaniciAdi,
                        SifreToken = obj.SifreToken,
                        FirmaKodu = obj.FirmaKodu,
                        DepoKodu = obj.DepoKodu
                    };
                }
            }
            catch (Exception ex)
            {
                LogIslemleri.HatayiLogla(ex);
            }
        }

Selamlar.

1 thought on “.NET 3.5 Compact FrameWork İle WebApi Çağırma | C#

Leave a Reply

Your email address will not be published. Required fields are marked *