ASP.Net, PHP, MVC vs Web Programlama C# WinForms ve Mono GTK Console Sistem ve Servis Programlama Networking ve İnternet

c# web server basit mvc

Web sunucusu servisleri sunucunuzu, bilgisayarınızı veya raspberry pi gibi bir cihazınızı yoracak kadar işlem yürütebilirler. Elbetteki kaynakların yönetimi, güvenlik gibi hususlardan dolayı IIS gibi bir web server kullanmak gerekebilir. Fakat birkaç parametre yollamak istediğimiz veya bir işlemine dair kayıtları okumak istediğimiz cihazlarımıza web server yazılımı kurmak gereksiz kalabilir.

Aşağıda c# console ile yaptığım basit bir web server paylaşıyorum. Web sayfası içeriklerini üreteceğim exe’nin bulunduğu dizindeki pages klasöründe aramasını isteyeceğim.

static string post;
        static HttpListenerContext context;
        static HttpListenerResponse response;
        static HttpListenerRequest request;
        static void Main(string[] args)
        {
            srv();
        }

        static void srv()
        {
            HttpListener server = new HttpListener();  
            server.Prefixes.Add("http://127.0.0.1/"); 
            server.Prefixes.Add("http://localhost/");

            server.Start();
            Console.WriteLine("Server başladı.. Link = http://localhost");
            while (true)
            {
                context = server.GetContext();
                response = context.Response;
                request = context.Request;

                string pgfname = context.Request.Url.LocalPath;
                string page = "";
                if(pgfname.Equals("/")) page= Directory.GetCurrentDirectory() + "\\pages\\index.html";
                else page = Directory.GetCurrentDirectory() + "\\pages" + pgfname;

                if (page == string.Empty)
                    page = Directory.GetCurrentDirectory() + "\\pages\\index.html";

                TextReader tr = new StreamReader(page);
                string msg = tr.ReadToEnd();

                using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
                {
                    post = reader.ReadToEnd();
                }

                string write = msg.Replace("@@rawbody", eklenen());

                byte[] buffer = Encoding.UTF8.GetBytes(write);

                response.ContentLength64 = buffer.Length;
                Stream st = response.OutputStream;
                st.Write(buffer, 0, buffer.Length);

                context.Response.Close();
            }
        }

Yukarıda pages dizinine koyduğum index.html sayfası şu şekildedir.

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <link href="content/stil.css" rel="stylesheet" />
    <title>Deneme sayfası</title>
</head>
<body>
    @@rawbody
</body>
</html>

Farkedileceği gibi eklenen() adında bir fonksiyon kullandım. index.html sayfasını master page (mvc’de layout view) olarak görmeyi hedefliyorum.

static string eklenen()
        {
            string str = "";
            string inpage = Directory.GetCurrentDirectory() + "\\pages\\inner.html";
            using (var reader = new StreamReader(inpage))
            {
                str = reader.ReadToEnd() + infunc();
            }
            
            Console.WriteLine(post);
            return str;
        }

Yukarıda inner.html adında iç sayfa oluşturdum. index.html sayfasında @@rawbody yazan yere bu sayfayı okutarak gömmesini istiyorum. inner.html sayfasına genel html taglarını girmiyorum.

<form method="post">
    <input type="text" name="ad" />
    <input type="text" name="soyad" />
    <input type="submit" />
</form>

Özellikle form örneği vermek istedim. Form ile bazı verileri post ederek sonucu ekrana yazabilmek için.

inner.html sayfasını sayfaya bastıktan sonra infunc() adında bir metod ekledim. Buradaki amacım basit bir contoller mantığı kullanmak. Örnekte post edilen verileri döndürüyorum.

static string infunc()
{
    string str = "";
    str = post;

    return str;
}

View ve Controller basit şekilde yukarıdaki gibi ele alınabilir. Model ise bir class oluşturup herhangi bir veritabanından veya dosyadan veri okutarak basit şekilde elde edilebilir.

class model
    {
        public string ad { get; set; }
        public string soyad { get; set; }

        public void oku()
        {
            using (var reader = new StreamReader("db.txt"))
            {
                string str = reader.ReadToEnd();
                this.ad = str.Split('|')[0];
                this.soyad = str.Split('|')[1];
            }
        }
    }

 

 

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir