首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

構建 ASP.NET MVC4+EF5+EasyUI+Unity2.x 後台管理系統(12):日誌與例外處理實戰應用 - 通用工具類與 Controller 整合

     編輯:關於ASP.NET

上一講建立了日誌資料表與模型,本篇將日誌機制落地到實際業務流程中。重點包括:建立通用工具類 ResultHelper(GUID 生成、字串處理、SQL 防注入)、封裝日誌寫入器 LogHandler 避免重複實例化、以及在 Controller 的 Create/Edit/Delete Action 中整合日誌記錄與例外處理。

核心通用工具類:ResultHelper

位於 App.Common 專案,提供專案級共用功能:

完整程式碼實作

using System;
using System.Web;
using System.Text.RegularExpressions;

namespace App.Common {
    public static class ResultHelper {
        
        #region 唯一識別碼生成
        
        /// 時間戳 + GUID 前 10 碼,生成 32 位唯一 ID
        public static string NewId {
            get {
                string timePart = DateTime.Now.ToString("yyyyMMddHHmmssfffffff");
                string guidPart = Guid.NewGuid().ToString("N").Substring(0, 10);
                return timePart + guidPart;
            }
        }
        
        /// 純時間戳 ID(高併發下可能重複,僅適用低併發場景)
        public static string NewTimeId {
            get { return DateTime.Now.ToString("yyyyMMddHHmmssfffffff"); }
        }
        
        #endregion
        
        #region 字串處理與安全過濾
        
        /// 截取字串並附加省略號,同時移除 HTML 標籤
        public static string SubValue(string value, int length) {
            if (string.IsNullOrEmpty(value)) return string.Empty;
            if (value.Length > length) {
                value = value.Substring(0, length) + "...";
            }
            return NoHtml(value);
        }
        
        /// 輸入端過濾:HTML 編碼、單引號轉義、換行轉 <br>
        public static string InputText(string inputString) {
            if (string.IsNullOrEmpty(inputString)) return string.Empty;
            
            inputString = inputString.Trim();
            inputString = inputString.Replace("
", "\n"); inputString = inputString.Replace("&", "&"); inputString = inputString.Replace("'", "''"); inputString = inputString.Replace("<", "<"); inputString = inputString.Replace(">", ">"); inputString = inputString.Replace("chr(60)", "<"); inputString = inputString.Replace("chr(37)", ">"); inputString = inputString.Replace("\"", """); inputString = inputString.Replace(";", ";"); return inputString; } /// 輸出端還原:HTML 解碼、單引號還原、<br> 還原換行 public static string OutputText(string outputString) { if (string.IsNullOrEmpty(outputString)) return string.Empty; outputString = outputString.Trim(); outputString = outputString.Replace("&", "&"); outputString = outputString.Replace("''", "'"); outputString = outputString.Replace("<", "<"); outputString = outputString.Replace(">", ">"); outputString = outputString.Replace("<", "chr(60)"); outputString = outputString.Replace(">", "chr(37)"); outputString = outputString.Replace(""", "\""); outputString = outputString.Replace(";", ";"); outputString = outputString.Replace("\n", "
"); return outputString; } /// 移除 HTML 標籤與腳本,防止 XSS public static string NoHtml(string htmlString) { if (string.IsNullOrEmpty(htmlString)) return string.Empty; // 移除腳本 htmlString = Regex.Replace(htmlString, @"]*?>.*?", "", RegexOptions.IgnoreCase); // 移除 HTML 標籤 htmlString = Regex.Replace(htmlString, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase); // 移除多餘空白行 htmlString = Regex.Replace(htmlString, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase); // 移除註釋 htmlString = Regex.Replace(htmlString, @"-->", "", RegexOptions.IgnoreCase); htmlString = Regex.Replace(htmlString, @"