آدرس های تصادفی و نحوه ی ایجاد آنها در ASP.NET

شنبه 9 اسفند 1393

در این مقاله درباره آدرس های تصادفی و نحوه ایجاد آنها در Asp.Net خواهیم آموخت

آدرس های تصادفی و نحوه ی ایجاد آنها در ASP.NET

این پروژه درباره ی آدرس های تصادفی و کمک به  صاحبان برنامه ها برای ساخت آدرس های کوچکی که بتواند در پایگاه داده ذخیره شود و یا به  برنامه بعدی به عنوان متن کوتاه پاس داده شود به جای آدرس های طولانی و حوصله سر بر.
اکثر شرکت ها از این تکنیک برای برای کوتاه کردن لینک های منابعشان یا هر لینک دیگری که کاربر بخواهد بیافزاید مانند توییتر و فیس بوک و تامبلر و ... استفاده میکنند.

اکنون اجازه دهید که  که مفهوم  این مطلب را درک  کنیم و چگونه این ویژگی را در وبسایت های ASP.NET مان  پیاده سازی کنیم. اما به خاطر داشته باشید که این یک کد C# خالص است و هیچ کدی از  فضای نام ها  و چارچوب های ASP.NET در آن استفاده نشده است. این بدان معناست که شما میتوانید از آن در برنامه های .NET خود مانند WPF و Windows Forms و غیره استفاده نمایید

مشکل آدرس های طولانی :

یک آدرس لینکیست که به مدرکی به خصوص که در اینترنت موجود است اشاره میکند و کاربر میتواند در هر لحظه  با هر وسیله ای که به اینترنت وصل میشود به آن دسترسی داشته باشد. بعضی اوقات این آدرس ها به قدری بلند هستند که کاربر را خسته میکند مانند یکی که تمام اطلاعات آن فایل را در خود دارد . برای مثال به نمونه زیر توجه کنید :

http://www.example.com/page/category/sub-category/month-date/some-general-fancy-text

این واقعا یک لینک طولانی است و اغلب آدرس های دیگر از این هم طولانی تر میباشند و شامل بیش از 500 کاراکتر میشوند. خب جستجوگر از این آدرس های طولانی خوشش نمیاد و گاهی اوقات IE با mailto دچار مشکل میشود : آدرس بیش از 500 کاراکتر.

نه تنها جستجوگر ها از این آدرس های طولانی متنفرند بلکه موتور های جستجو نیز از این آدرس های طولانی متنفرند. همچنین  گفته میشود که گوگل حتی به آدرس های بیش از 1855 کاراکتر اهمیت نمیدهد اینم لینک منبع : http://wiert.me/2010/04/20/maximum-url-lengths/
پس فقط ما کاربرها نیستیم که از این لینک های طولانی متنفریم که باز هم قابل دسترسی نیستند زیرا هیچ چیز از آنها را به یاد نداریم بعد از اینکه تب یا صفحه های مربوطه را بستیم یا باید به تاریخچه برای چک کردن آنها برویم. اما این نرم افزار هم هستند که از استفاده از این همه کاراکتر در آدرس ها جلوگیری میکنند.

چرا ترجیح داده نمیشوند

معمولا بیش از یک دلیل برای ترجیح ندادن این لینک های طولانی وجود دارد . اما هرکس دلایل مربوط به خوش را دارد همانطور که من دارم. من دوست ندارم که نوار آدرسم را با این همه داده پر کنم. من تنها ترجیح میدهم که آدرس اصلی وبسایت و موقعیت صفحه ای که در آن قرار دارم را داشته باشم.

در هر صورت بسیار بهتر است که آدرس های کوتاه به جای آدرس های بلند بفرستیم. هر کاراکتر در آدرس یک بایت داده به خود اختصاص میدهد (کاراکتر ها 1 بایت میباشند) و ممکن است 2 بایت هم بشوند اگر شما از unicode استفاده بکنید. نمای کلی unicode را میتوانید از http://msdn.microsoft.com/en-us/library/x9h8tsay.aspx  ببینید

برای  شبکه های خوب  و برای انتقال داده های بهتر بین کامپیوتر و دستگاه های آن بهتر است که از داده های سربار کمتری استفاده کنید تا پیغام واقعی سریعتر به مقصد برسد. 2048 کاراکتر با دو بایت  برای هرکدام حجمی حدود 4 کیلوبایت داده را شامل میشود که تنها برای شناخت منبع به کار میروند ! 4 کیلوبایت داده ای که که میتواند به بخش سرباری داده در بسته ی داده ی ساخته شده اضافه میشود تا به شبکه منتقل شود و هیچ کاربردی هم ندارد جز اینکه منبع آدرسی که کاربر میخواهد از آن استفاده کند یا داده ای که میخواهد بفرستد را شناسایی کند. برای اینترنت هایی با سرعت بالا این خیلی مشکل حادی به حساب نمیاد.اما برای کاربران موبایل یا سایر کاربران با سرعت اینترنت پایین بسته های داده ایاین واقعا مشکل بزرگی به حساب میاد زیرا آنها ابتدا نیاز دارند که داده های منبع را بفرستند و بعد به کارهای دیگر برسند .

چه کاری ممکن است انجام شود

اغلب کوتاه کردن آدرس صورت نمیگیرد  و همان آدرس های بلند به صورت اندکی خلاصه شده فرستاده میشوند ,  برای اغلب شرکت ها  به خصوص آنهایی که وب سایت های 140 کاراکتری دارند مانند توییتر به این ویژگی احتیاج دارندکه آدرس طولانی را در سیستمشان ذخیره کنند و تنها آدرس کوتاه جاسازی شده را در توییتشان نمایش دهند. با این روش هر آدرس طولانی صرف نظر از درازیش میتواند تبدیل به آدرسی با تنها چند کاراکتر شود. 15 کاراکتر برای توییتر و برای بعضی دیگر شاید کمتر مانند Goo.gl (کوتاه شده ی آدرس گوگل) و fb.me (کوتاه شده ی آدرس فیس بوک) و سایر شرکت ها.

این به مردم این قابلیت را میدهد که آدرس ها کوتاه بنویسند. نظیر : http://exm.pl/AfzaalBlog (که ممکن است مستقیما به  وبلاگ من منتقل شوید). که کاربر میتواند آن را راحت تر خاطر بسپارد. این آدرس ها بسیار بهترند . زیرا :

⦁    کوتاهند
⦁    حجم داده های کمتری برای انتقال نیاز دارند
⦁    به آسانی حفظ میشوند
⦁    با مفهوم تر است و باعث میشود که کاربر واقعا حس کند که به کجا میرود با حدود جمله ای 2 – 4 کلمه ای

این ها تنها چند دلیلی بودند که استفاده از آدرس های کوتاه را واجب میکردند. نه تنها برای ارسال سریعتر داده ها ( معمولا آدرس های کوتاه و بلند در سرعت اینترنت بالا تفاوتی ندارند ولی در سرعت اینترنت پایین تفاوت فاحشی دارند.)

آدرس های تصادفی

اگر چیزی که قبلا گفته شد در رابطه با اینکه آدرس های کوتاه بسیار بهترند پس دیگر چرا مردم بخواهند از آدرس های تصادفی استفاده کنند ؟ که حتی باعث بوجود آمدن خرابی برای ساخت آدرس های تصادفی به ازای تک تک ملاقات کنندگان می شود

چرا از آدرس های تصادفی استفاده کنیم ؟

آدرس کوتاه بهترین آدرس است همانطور که قبلا مفصلا توضیح دادیم. اما معمولا تعداد بسیار زیادی کاربر هستند که ممکن است از شما بخواهند برای همه ی منابع آنها آدرس تولید کنید که مقداری زمان میگیرد تا کاربر فرم ها را برای دریافت آدرس کوتاه از سرور شما پر کند و سپس عریضه ای را امضا کند که با شرایط  و ضوابط موافقت دارد و آدرس کوتاه را برای استفاده تحویل بگیرد. خب این یک پروسه ی طولانی است .

به همین دلیل  یک وبسایت ممکن است برای یک سری از توابع خود رشته های عددی و الفبایی که به صورت تصادفی هستند بسازد. به عبارت دیگر کاربر برای دریافت هر آدرس جدید باید تمام این پروسه را مرتبا انجام دهد. تصادفی بودن آن ثابت باقی میماند زیرا هردفعه چک میکند که آدرسی که تولید میکند قبلا مشابهش تولید نشده باشد.

تعداد آدرس هایی که با این نمایندگی متن عددی و الفبایی تولید میشود بستگی به تعداد کل کاراکترهای مجاز در آدرس میباشند.  شما ممکن است با مفهوم ترکیب و جایگشت آشنا باشید که در آن هر کاراکتر  با توجه چینشش با سایر کاراکتر ها میتواند هر دفعه نتیجه ی جدیدی بسازد. برای مثال یک رشته ی ساذه 10 تایی از کاراکتر ها که میتواند 9 کاراکتر را در خود ذخیره کند میتواند رشد کند به ... راستش من خیلی تو ریاضیات سررشته ندارم ولی انقدر میدونم که به قدری بزرگ میشود که میتوان تمام مدرک منبع یک کارخانه را تسخیر کرد بدون تکرار هیچگونه لینکی.

شما حتی میتوانید آن را با استفاده از حروف بزرگ و کوچک ترکیبی در رشته ی آدرستان قوی تر هم بکنید. این باعث میشود که آدرستان 3 برابر قوی تر شود و ترکیب آنها نیز آنقدر قوی میشود که که هیچ یک از کاربرانتون هیچگاه نمیتوانند از خطاهایی نظیر " ببخشید ! آدرس ها تمام شدند" اعتراض کنند !


ترکیب های قوی تری بسازید ,  یک آدرس واقعا تصادفی !


از آنجایی که آدرس های تصادفی نیاز دارند که تصادفی باشند و قصد ساخت آدرس کوتاه این است که بین 7 تا 10 کاراکتر باشند , هدف اصلی این است که بتوان این آدرس های کوتاه تصادفی را در دنیای واقعی نیز ساخت و نه فقط به صورت رشته هایی در آدرس ها .

در این مثال من دو کاراکتر مخصوص اضافه کردم تا کمی به تصادفیت آن قدرت ببخشم. به طور مشابه ادرس باید با اندازه کافی تصادفی باشد که در آینده ای نزدیک یا دور نسل آدرس ها اختمال تشابه اسمی در آن به حداقل برسد. تشابه در نسل    آدرس ها منجر به توقف برنامه میشود زیرا هیچ آدرس کوتاهی تولید نمیشود زیرا منطق اصلی برنامه برای ساخت آدرس با شکست رو به رو میشود.

در منطق قبلی , اگر شما به شرایط دقت میکردید جایی که انتخاب ارزش های حروف و اعداد بوجود آمده است , میتوانید ببینید که اعداد نسبت 1 به 3 دارند یعنی 25% را اعداد و 75% را حروف تشکیل میدهند. چرا من اینکارا اینجا بکار بردم ؟ چگونه تاثیر آن بر آدرس در واقعیت اثر میگذارد؟

درواقع رشته ای که ما میخواهیم بسازیم جایگشتی از 26 حرف که به عنوان کاراکتر استفاده شده اند  و نه تنها همان 26 تا بلکه علاوه بر آن 2 تا کاراکتر مخصوص هم هستند. این شانس تکراری شدن را با توجه به منطق کاهش میدهد. حال یک لیست دیگر که شامل اعداد است نیز وجود دارد. آنها را ترکیب کنید تا یک ادرس تصادفی ساخته شود. اما تا کی ؟؟  این بستگی به ترکیبات دارد , تا به حال دیده اید که یک شیمیدان چگونه کارمیکند ؟ او ترکیبات را با مقدار های مشخص انتخاب میکند تا ترکیبی که میسازد به بهترین شکل پایدار باشد.

به طور مشابه افزودن مقداری به سری کاراکتر ها نتیجه ی خوبی میسازد و همینطور حجم عظیمی از آدرس های تصادفی بیشتر برای ساخته شدن. یک دانش آموز ریاضیات یا آمار میتواند به ما کمک کند تا جایگشت خوبی از این لیست پیدا کنیم که به ما در به حداقل رساندن احتمال تکرار کمک شایانی میکند. اگر اعداد به 50 % افزایش پیدا میکردند آنگاه شانس اعداد و کاراکتر ها 50 50 میشد که آسیب پذیری  احتمال تکرار را بالا میبرد. همچنین 0 % عدد یا تعداد بسیار محدودی از آن در برنامه هم ممکن است باعث شود که کاراکتر ها بعد از مدتی هرچند طولانی دچار تکرار شوند. آنگاه آدرس ها به پایگاه داده اضافه میشوند و منطق برنامه ی شما نیاز به تغییر یا بروز رسانی خواهد داشت .
و آخرین چیزی که منجر به وجود آمدن لایه ای برای از بین بردن احتمال تکرار میشود این است که حساسیت رشته تان را بررسی کنید. برای مثال B برابر با b  نیست . شما باید هر کاراکتر از رشته را با کاراکتر رشته ی دیگر چک کنید تا باهم تطابق داشته باشند . یا به عبارت دیگر شما میتوانید از متد Equal() که برای همه اشیا موجود است استفاده کنید.(زیرا آن از System.objext ارث بری کرده است). برای چک کردن این که آیا دو رشته با هم در کاراکتر ها و مقدار ها برابرند. برای مثال کد زیر را ببینید :


    // creating the variables  
    string a = "Love for all Hatred for none!";  
    string b = "LOVE FOR ALL HATRED FOR NONE!";  
    string c = "love for all hatred for none!";  
    string d = "Love for all Hatred for none!";  
              
    // testing the objects, whether they're equal or not.  
    if(a.Equals(b)) {  
       Console.WriteLine("a matches b.");  
    } else {  
       Console.WriteLine("a doesn't match b");  
    }  
    if(a.Equals(c)) {  
       Console.WriteLine("a matches c");  
    } else {  
       Console.WriteLine("a doesn't match c");  
    }  
    if(a.Equals(d)) {  
       Console.WriteLine("a matches d");  
    } else {  
       Console.WriteLine("a doesn't match d");  
    }  
      
    // Output of the program  
    // a doesn't match b  
    // a doesn't match c  
    // a matches d   

  مثالی را نشان میدهد درباره ی حساسیت مقدار رشته ها برای ساخت لایه ای دیگر از حفاظ در برابر تکرار است. از https://dotnetfiddle.net/xPZKBa لینک برای تست استفاده کنید.

ساخت آدرس های تصادفی در ASP.NET


ASP.NET به شما اجاره میدهد یک رشته ی تصادفی بسازید با استفاده از GUID که میتوانید برای ساخت یک رشته ی تک و طولانی که برایتان " تکرار نشدنی" را به همرا خواهد داشت بسازید . اما شما همچنین میتوانید یک قطعه کد کوتاهی بسازید که به طور مداوم به شما یک رشته با مجموعه ی تصادفی و دنباله ای از کاراکتر ها را بدهد.

کد برای تابع

قدم اول ساخت یک آدرس تصادفی استکه بستگی به حروف (کاراکتر ها)  و داده های عددی (اعداد) دارد.پس کاری که ما میکنیم اسن است که دو لیست تشکیل میدهیم یکی تمام حروف را دربر میگیرد و دیگری ارقام 0 تا 9 را در بر میگیرد.

در لیست کاراکتر ها من "_" و "-" را نیز افزودم تا شانس تکرار کاهش پیدا کند. شما میتوانید هر چیز دیگری که میخواهید در آدرس سایتتان مجاز باشد را اضافه کنید تا لایه ی تکرار نشدن برنامه تان را ضخیم تر کنید.

موضوع دوم هم این است که شما نیاز دارید که اعداد تصادفی بسازید. شما میتوانید تنها اعداد صحیح بسازید. کاراکتر ها نمیتوانند در ساخت کلاس تصادفی استفاده شوند. پس ما از Indexer ها استفاده میکنیم که اجازه انتخاب یکی از المان ها از میان مجموعه را داشته باشیم. یک لیست یک مجموعه از المان های نوع T میباشد که ما بعدا با به هم پیوند زدن آن ها آن ها را به رشته های آدرسی که میخواهیم بنویسیم تبدیلشان میکنیم


    // List of characters and numbers to be used...  
    string URL = "";  
    List<int> numbers = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};  
    List<char> characters = new List<char>()   
    {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '-', '_'};  
      
    // Create one instance of the Random  
    Random rand = new Random();  
    // run the loop till I get a string of 10 characters  
    for (int i = 0; i < 11; i++) {  
        // Get random numbers, to get either a character or a number...  
        int random = rand.Next(0, 3);  
        if(random == 1) {  
            // use a number  
            random = rand.Next(0, numbers.Count);  
            URL += numbers[random].ToString();  
        } else {  
            // Use a character  
            random = rand.Next(0, characters.Count);  
            URL += characters[random].ToString();  
        }  
    }   

استفاده از کلاس های مجزا

مطمئن باشید که این تابع را درون یک کلاس جداگانه خارج از جایی که فراخوانیش میکنید بنویسید. حتی میتوانید آن را مخصوص به یک عضو کنید. این یک متد GetURL() میباشد و از نوع Static میباشد که کسی نتواند مانند آن را بسازد.

این شانس تکرار کد را به حداقل میرساند که صحبت اصلی این مقاله و در کد شما برخلاف قوانین برنامه نویسی است. اگر شما کلاسی ساختید کلاس به شکل زیر خواهد بود:


    // Required namespaces  
    using System;  
    using System.Collections.Generic;  
    using System.Web;  
      
    /// <summary>  
    /// RandomURL class generates Random URLs for applications.  
    /// </summary>  
      
    public class RandomURL  
    {  
        // List of characters and numbers to be used...  
        private static List<int> numbers = new List<int>() {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};  
        private static List<char> characters = new List<char>()   
        {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',   
        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B',   
        'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',   
        'Q', 'R', 'S',  'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '-', '_'};  
      
        public static string GetURL () {      
            string URL = "";  
            Random rand = new Random();  
            // run the loop till I get a string of 10 characters  
            for (int i = 0; i < 11; i++) {  
                // Get random numbers, to get either a character or a number...  
                int random = rand.Next(0, 3);  
                if(random == 1) {  
                    // use a number  
                    random = rand.Next(0, numbers.Count);  
                    URL += numbers[random].ToString();  
                } else {  
                    random = rand.Next(0, characters.Count);  
                    URL += characters[random].ToString();  
                }  
            }  
            return URL;  
        }  
    }   

به خاطر داسته باشید که اعضا (متد و هردو لیست) از نوع static میباشند. زیرا ما هیچگاه نمیخواهیم که مقدار های آن ها را دوباره تغییر دهیم مگر آنکه بخواهیم کد را همان کد را دوباره اجرا کنیم یا به سادگی قرار دهیم و امکان وجود مثال های متعددی از یک کلاس در یک زمان نیست پس ما آن ها را Static تعریف میکنیم تا برای هردفعه که میخواهیم از آن ها استفاده کنیم احتیاجی به ساخت یک نمونه جدید نباشد.

نتیجه ی این کد

من کدی مشابه آنچه گفتم در بخش تابع و همینطور بخش کلاس اجرا کردم و نتیجه داد. نتیجه ی صفحه ی وب وبسایت ASP.NET من که آدرس ساخته شده را نیز به صورت زیر نشان میدهد :

هربار تلاس برای اجرای کد به شما یک آدرس تصادفی میدهد که شما میتوانید از آن برای ارسال پیام های کوتاه یا از سایر خدمات برنامه استفاده کنید.

ذخیره و استفاده مجدد از آدرس اصلی

اولین قدم ذخیره ی آدرس در پایگاه داده میباشد شما میتوانید پایگاه داده تان را طوری کنید برای ذخیره آدرس و آدرس کوتاهی که میخواهید از آن در طول این پروسه استفاده کنید . از ترکیب زیر میتوانید استفاده کنید . فقط به خاطر داشته باشید که ID در این متد ضروری نیست.

بعضی چیز های مهم که لازم به اشاره  هستند :
⦁    اندازه ی آدرس طولانی 4000 قرار داده شده است زیرا دیگر بیش از این مقدار ممکن نمیباشد.
⦁    اندازه ی آدرس کوتاه 50 قرار داده شده است زیرا آدرس کوتاه است و سایز آن باید در همین حدود باشد.
⦁    همانطور که پیش تر گفته شد ID ضروری نیست.
حال شما میتوانید به راحتی  کد پایانی برنامه را برای ذخیره داده و ساخت یک آدرس جدید که با آدرس طولانی در ارتباط باشد در برنامه تان استفاده کنید.
یادآوری: من کلاس یا کد C# را تغییر ندادم و تنها آدرس و منطق برنامه را به روز رسانی کردم برای ذخیره آدرس ها و ساخت یک صفحه ی جدید برای فرستادن کاربر به آدرس اصلی ای که توسط برنامه کوتاه شده است. پس خیلی گیج نشوید که آیا از کد قبلی که گذاشتم استفاده کنید یا خیر. این یکی ویژگی جدیدی است.

یک فرم HTML در صفحه ی وب برای دریافت آدرس ها از کاربر بسازید:

<form method="post">  
    <input type="text" name="url" />  
    <input type="submit" value="Submit" />  
</form> 

این کافیست . حال ما برای ذخیره ی آدرس در پایگاه داده میتوانیم از کد زیر استفاده کنیم :


    string URL = "";  
    string longUrl = "";  
    if(IsPost) {  
        longUrl = Request.Form["url"];  
        // Change the UI of the web page.  
        // Open the connection  
        var db = Database.Open("StarterSite");  
      
        // Get the URL  
        URL = RandomURL.GetURL();  
        if(db.Query("SELECT * FROM RandomUrls WHERE ShortUrl = @0", URL).Count() > 0) {  
            // Generate a new URL because the previous one had a match.  
            URL = RandomURL.GetURL();  
        }  
      
        // Now the URL is unique, so save it...  
        db.Execute("INSERT INTO RandomUrls (UrlString, ShortUrl) VALUES (@0, @1)", longUrl, URL);  
    }   

توضیح کوتاهی درمورد کد بالا این است که کدزمانی که درخواست فرستاده شود اجرا میشود. اگر انجام شده بود کدی که کاربر در فرم فرستاده بود را نگه میدارد و درون پایگاه داده به دنبال آن میگردد. اگر آدرس کوتاه ساخته شده نمونه دیگری داشت یک آدرس تصادفی جدید خواهد ساخت (احتمال این اتفاق بسیار کم است) و سپس هردو آدرس ها را در پایگاه داده ذخیره میکند.زمانی که اجرا شد آدرس ها را به صورت زیر ذخیره میکند :

شما میتوانید شرایط خودتان را نیز به آن الحاق کنید تا آدرس طولانی نیز برای تکرار نشدن در پایگاه داده چک شود.

استخراج آدرس اصلی و هدایت کاربر

بخش اصلی این پروسه استخراج آدرس واقعی برای هدایت کاربر میباشد که به  سادگی یک Query در پایگاه داده میباشد. در ابتدا یک صفحه ی ASP.NET برای نوشتن کد برای  Query به پایگاه داده بسازید.همانند Query که من استفاده کرده ام و فهرست آدرس ها را مشاهده میکنید :

شما رشته ی آدرس کوتاهی که در پایگاه داده با توجه به آدرس طولانی ساخته اید را ذخیره میکنید.شما میتوانید آدرس کوتاه را به صفحه پاس بدهید و وظایف دیگری هم انجام بدهید که در این مقاله هدایت صورت میگیرد.این کد را در صفحه ی ASP.NET جدید خود بنویسید :


    // Get the short url  
    var shortUrl = UrlData[0];  
      
    // find it in the database  
    var db = Database.Open("StarterSite");  
    var found = db.Query("SELECT * FROM RandomUrls WHERE ShortUrl = @0", shortUrl).Count() > 0;  
    if(found) {  
        Response.Redirect(db.Query  
        ("SELECT * FROM RandomUrls WHERE ShortUrl = @0", shortUrl).First().UrlString);  
    } else {  
        Response.Redirect("~/");  
    }   

کد فوق درون پایگاه داده ی شما به دنبال آدرس طولانی  که کوتاه شده است می گردد. من فایل را طوری قرار داده ام که برای هدایت نیز استفاده شود پس در برنامه ی من  آدرس به صورت زیر پاس داده خواهد شد :

از آنجایی که این صفحه به Google مرتبط  بود ,  نتیجه صفحه ی زیر خواهد بود :

از این راه شما میتوانید کاربر را  به آدرس صفحه ی وبی که طولانی بود و کوتاه شده بود به راحتی هدایت کنید.

نکته : چرا تنها از یک نمونه تصادفی استفاده کنیم ؟

من این مطلبی که در این مقاله گفته شد را برای اشتراک جالب دیدم. برای استفاده از تنها یک نمونه تصادفی و متد .Next() برای ساخت یک عدد تصادفی جدید . نکته ی کلیدی این است که این اعداد تصادفی توسط یک " Seed" ساخته میشوند. اگر شما Seed را به سازنده ی شئ پاس بدهید از آن برای ساخت یک عدد تصادفی جدید استفاده میکند. وگرنه آن از سیستم زمانی حال برای Seedاستفاده میکند و زمانیکه کد در همان زمان اجرا شود , هیچ ویژگی خطایابی فعال نمیشود یا هر هک مورد علاقه  , هر مثالی که شما استفاده میکنید عدد تصادفی را شامل میشود.

برای به حداقل رساندن این خطا شما باید تنها یک عدد تصادفی بسازید و مقدار آن را هربار با استفاده از متد .Next() تغییر دهید و حدود مقداری که میخواهید داشته باشید را به آن پاس بدهید تا عددی تصادفی در این محدوده داشته باشید.

نقاط مورد علاقه

 ساختن کلاس ساده ای که ساخت این آدرس های تصادفی را انجام دهد آسان است و همچنین از احتمال رخ دادن قانون تکرار شدن یک کد در برنامه تان جلوگیری میکند.

ساختن فقط یک مورد تصادفی بهتر است ; زمانی که ساخته شد با استفاده از متد .Next() میتوانید اعداد تصادفی جدیدی برای آن مورد در هر تابعی بسازید.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید