.Net 修改 Header 中的 Expires 資訊 (網頁優化)

利用 IHttpModule 將每個輸出的檔案 Header 加入 Expires 資訊。

打開 web.config 進行編輯,在 <system.webServer> 下的 <modules> 裡加入以下:

<add name="CustomHeaderModule" type="專案名稱.CustomHeaderModule" />

以上名稱 CustomHeaderModule 可以自行更換。

網站目錄下新增一個類別檔案,名稱為 CustomHeaderModule.cs 程式碼如下:

using System;
using System.Web;
namespace XXX
{
    public class CustomHeaderModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += OnPreSendRequestHeaders;
        }
        public void Dispose() { }
        void OnPreSendRequestHeaders(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Expires = 60 * 24; //保留一天
        }
    }
}

  2012-08-24      ez      .NET
.Net 修改 Header 中的 Server 資訊 (網頁優化)

HTTP Header 中可以發現有 Server 資訊,但是假如該版本 Server 含有漏洞,就很容易被駭客鎖定,所以就必須將 Server 資訊藏起來會較為安全。

可以利用 IHttpModule 即可達到效果。

打開 web.config 進行編輯,在 <system.webServer> 下的 <modules> 裡加入以下:

<add name="CustomHeaderModule" type="專案名稱.CustomHeaderModule" />


  2012-08-24      ez      .NET
.Net 使用 Active Directory 的帳號做會員認證

.Net 可以使用 DirectoryEntry 連接 Active Directory ,假如有個管理後台網頁,此時就可以透過 Active Directory 認證登入後台。

範例程式碼如下:

            string ActiveDirectoryName = "AD網址或者IP";
            string UserName = "帳號";
            string UserPwd = "密碼";
            DirectoryEntry de = new DirectoryEntry("LDAP://" + ActiveDirectoryName, UserName, UserPwd);
            PropertyCollection pc = de.Properties;
            if (pc == null)
            {
                Response.Write("登入失敗");
            }
            else
            {
                Response.Write("登入成功<br><br>");
                //列出相關參數
                foreach (string k in pc.PropertyNames)
                {
                    try
                    {
                        Response.Write(k + " = " + pc[k][0] + "<br>");
                    }
                    catch { }
                }
            }

  2012-08-24      ez      .NET
.Net 防止網頁被別人嵌入 iframe (網頁優化)

網頁常常被其他人嵌入 iframe 嗎?除了可以用 javascript 判斷外,也可以利用 Http Header 即可防止此問題。

只需將 Header 加入 X-Frame-Options,並且設為 SAMEORIGIN。

打開 web.config 進行編輯,在 <system.webServer> 下的 <httpProtocol> 下的 <customHeaders> 裡加入以下:

        <add name="X-Frame-Options" value="SAMEORIGIN" />


  2012-08-24      ez      .NET
.Net 利用 BitmapData 檢查圖片是否為空白

本篇利用 BitmapData 檢查圖片是否為空白!

※定義:全黑或全白就算是空白。

//檢查圖片是否擷取成功
bool NotNULL = false;
using (Bitmap b = (Bitmap)Bitmap.FromFile(ScreenshotRoute))
{
    BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    unsafe
    {
        byte* p = (byte*)bData.Scan0.ToPointer();
        for (int y = 0; y < b.Height; y++)
        {
            for (int x = 0; x < b.Width; x++)
            {
                if ((p[0] != 255 && p[0] != 0) || (p[1] != 255 && p[1] != 0) || (p[2] != 255 && p[2] != 0))
                {
                    NotNULL = true;
                    break;
                }
                p += 3;
            }
            if (NotNULL) break;
        }
        b.UnlockBits(bData);
    }
}
Console.WriteLine(NotNULL ? "不是空白" : "空白");


  2012-08-23      ez      .NET
.Net 下載 FTP 檔案

本篇利用 FtpWebRequest 下載 FTP 檔案:

        private static string FtpDownLoad(string url, string strUserName, string strPassword)
        {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(url));
            request.Method = WebRequestMethods.Ftp.DownloadFile;
            if (!String.IsNullOrEmpty(strUserName) && !String.IsNullOrEmpty(strPassword)) request.Credentials = new NetworkCredential(strUserName, strPassword);
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(responseStream, Encoding.Default);
            return reader.ReadToEnd();
        }

  2012-08-24      ez      .NET
.Net 產生 檔案指紋 MD5

取得檔案的MD5值,可以用來判斷檔案是否已變更!

        /// <summary>
        /// 取的檔案指紋
        /// </summary>
        /// <param name="FileRoute">檔案路徑</param>
        /// <returns>回傳MD5</returns>
        public string GetFileMD5(string FileRoute)
        {
            if (File.Exists(FileRoute))
            {
                string str = string.Empty;
                using (FileStream FS = new FileStream(FileRoute, FileMode.Open, FileAccess.Read))
                {
                    byte[] bytes = (new MD5CryptoServiceProvider()).ComputeHash(FS);
                    str = BitConverter.ToString(bytes).Replace("-", string.Empty);
                    FS.Close();
                }
                return str;
            }
            else
                return string.Empty;
        }

  2013-09-24      ez      .NET
.Net 連線 MySQL 資料庫 查詢 修改 新增

首先必須下載 MySQL Connector Net 程式:

官方下載網址:http://dev.mysql.com/downloads/connector/net/
本地下載:mysql-connector-net-6.5.4-noinstall

讀取資料表:

using MySql.Data.MySqlClient;
MySqlConnection con = new MySqlConnection(String.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};connection timeout={5};use compression={6};pooling={7};min pool size={8};max pool size={9};", "127.0.0.1", "3306", "Database", "UserID", "Password", "5", "True", "False", "5", "100"));
con.Open();
DataSet DS = new DataSet();
MySqlDataAdapter DT = new MySqlDataAdapter("SELECT * FROM XXXX", con);
DT.SelectCommand.CommandTimeout = 60;
DT.Fill(DS);
DT.Dispose();
con.Close();
con.Dispose();
con = null;

新增和修改就不寫瞜!只需要把 SQL 指令改掉即可!


  2012-06-27      ez      .NET
.Net 連線 FTP 列表、檔案大小、檔案下載

本篇利用 FTP Class 連線到 FTP,並且將檔案列出來!

FtpConnection connection = new FtpConnection();
connection.MessageReceived += new FtpConnectionEventHandler(Ftp.connection_MessageReceived);
connection.Host = "ftp://xxx.xxx.xxx/";
connection.UserName = "xxx";
connection.Password = "xxxxxx";
connection.RemoteDirectory = "";
//列出資料夾內的檔案及資料夾
List<string> files = connection.ListDirectory();
foreach (string file in files)
{
          Response.Write(file + "<br>");
}

範例檔案:Ftp_List


  2012-06-26      ez      .NET