代碼閱讀總結之ASP.NET StartKit TimeTracker(QueryString之改進筆記)

來源:互聯網
上載者:User

在ASP.NET StartKit TimeTracker中使用了大量QueryString
例如:
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=2

現在讓我們在IE地址裡面敲入下面的地址,會出現什麼情況?
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=a2
或者
http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=

很明顯參數index要求接到的是整數.而我們敲入的地址中參數不符合要求,異常.

那有沒有辦法避免這類情況的發生呢?

其實我們可以定義一個頁面基類.
public class PageBase :System.Web.UI.Page
讓系統中的其他aspx頁面繼承PageBase.

把取得QueryString中數值寫成方法,放在基類中.
在基類編寫3個方法.

 

    <summary> 
        /**//// 得到QueryString參數的數值 
        /// </summary> 
        /// <param name="queryStringName">QueryString參數的名稱</param> 
        /// <param name="result">QueryString參數的數值(string類型)</param> 
        protected void GetQueryStringValue(string queryStringName,out string result) 
        { 
            result=String.Empty; 
            result=Request.QueryString[queryStringName]; 
             
            //沒有接到參數,異常,轉到出錯誤頁 
            if (result==null || result=="") 
            { 
                errorPageRedirect(); 
            } 
        } 

 

/**//// <summary>
        /// 得到QueryString參數的數值
        /// </summary>
        /// <param name="queryStringName">QueryString參數的名稱</param>
        /// <param name="result">QueryString參數的數值(int類型)</param>
        protected void GetQueryStringValue(string queryStringName,out int result)
        {
            string str;
            GetQueryStringValue(queryStringName,out str);

            result=0;    

            try
            {
                result=Convert.ToInt32(str);
            }
            catch(OverflowException)
            {
                //小於int的MinValue或大於int的MaxValue,異常,轉到出錯誤頁
                errorPageRedirect();
            }
            catch(FormatException)
            {
                //非數字字元,異常,轉到出錯誤頁
                errorPageRedirect();
            }
            catch(ArgumentException)
            {
                //Null 參考,異常,轉到出錯誤頁
                errorPageRedirect();
            }
        }

 

/**//// <summary>
        /// 發生錯誤時,頁面轉向
        /// </summary>
        protected void errorPageRedirect()
        {
            Response.Redirect("ErrorQueryString.aspx",true);
        }

這樣我們在aspx頁面中只要調用父類方法即可.方法會為我們處理異常.

例如:
int id;
GetQueryStringValue("",out id);

要是異常,方法會為我們處理,並轉向頁面ErrorQueryString.aspx
我們還可以在ErrorQueryString.aspx頁面中做錯誤資訊記錄.例如把錯誤資訊寫到日誌或者錯誤資訊表中.

上面的方法現在只可以取string類型和int類型2種類型的參數
我們可以根據需要重載GetQueryStringValue方法即可.
我就在項目中重載了3次,還可以取枚舉型別參數

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.