حذف کاراکتر های اضافه (White-Space) از خروجی Asp.Net

دوشنبه 18 فروردین 1393

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

حذف کاراکتر های اضافه (White-Space) از خروجی Asp.Net

سلام دوستان

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

البته اینکار خوبه و به خوانایی کد کمک زیادی میکنه ولی در خروجی صفحه که به سمت کاربر ارسال میشه این فضاهای خالی نیز ارسال خواهد شد

تصویر زیر یک نمونه از این اتفاق است

حالا کدی که به کاربر ارسال میشه رو ببینید

 

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

حجم این صفحه رو ببینید

 

خب حالا ما قصد داریم قبل از ارسال صفحه به سمت کلاینت این کاراکتر های اضافه رو حذف کنیم

اول کلاسی نیاز داریم که با استفاده از عبارت های با قاعده Regular expression کاراکترهای اضافه رو حذف کنه

نام این کلاس WhitespaceFilter.cs است

using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
namespace ClearWhiteSpace_Asp
{
    internal class WhitespaceFilter : Stream
    {
        //private static readonly Regex Pattern = new Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}");
        private static readonly Regex Pattern = new Regex(@"^\s+", RegexOptions.Multiline | RegexOptions.Compiled);
        private readonly Stream _stream;
        public override bool CanRead
        {
            get { return true; }
        }
        public override bool CanSeek
        {
            get { return true; }
        }
        public override bool CanWrite
        {
            get { return true; }
        }
        public override long Length
        {
            get { return 0; }
        }
        public override long Position { get; set; }
        public override void Flush()
        {
            _stream.Flush();
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            return _stream.Read(buffer, offset, count);
        }
        public override long Seek(long offset, SeekOrigin origin)
        {
            return _stream.Seek(offset, origin);
        }
        public override void SetLength(long value)
        {
            _stream.SetLength(value);
        }
        public override void Close()
        {
            _stream.Close();
        }
        public override void Write(byte[] buffer, int offset, int count)
        {
            byte[] data = new byte[count];
            Buffer.BlockCopy(buffer, offset, data, 0, count);
            string content = Encoding.Default.GetString(buffer);
            content = Pattern.Replace(content, string.Empty);
            byte[] output = Encoding.Default.GetBytes(content);
            _stream.Write(output, 0, output.GetLength(0));
        }
        public WhitespaceFilter(Stream stream)
        {
            _stream = stream;
        }
    }
}

 

خب در مرحله بعد به یک HttpModule نیاز داریم که در هر درخواست خروجی را به کلاس مورد نظر ما ارسال کند

MyModule.cs

    public class MyModule : IHttpModule
    {
        void IHttpModule.Init(HttpApplication context)
        {
            context.BeginRequest += ContextBeginRequest;
        }
        private void ContextBeginRequest(object sender, EventArgs e)
        {
            HttpApplication app = sender as HttpApplication;
            if (app != null)
                if (app.Request.RawUrl.Contains(".aspx"))
                {
                    app.Response.Filter = new WhitespaceFilter(app.Response.Filter);
                }
        }
        void IHttpModule.Dispose()
        {
            // Nothing to dispose; 
        }
    }

در مرحله بعد کافیست در وب کانفیک ماژول خود را معرفی کنیم

  <httpModules>
          <add name="MyModule" type="ClearWhiteSpace_Asp.MyModule"/>
        </httpModules>

اگر از IIS7 استفاده میکنید تگ زیر را هم باید اضافه کنید

  <system.webserver>
    <modules>
      <add name="MyModule" type="ClearWhiteSpace_Asp.MyModule"/>
    </modules>
  </system.webserver>

حالا با خیال راحت میتونید کدهای خوانا و تمیز بنویسید

 

نمونه هم ضمیمه کردم

موفق باشید

 

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

ایمان مدائنی

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

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

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