開源我的個人小網站


繼上上周和上周兩個周末都在學習C#基礎,這周終於換種方式過了(哎!尼瑪還是對着電腦,不是對着妹子T_T)。自從上次在園子里看到博友分享了前端框架Bootstrap后,就一直想用它來搞個小站點玩玩。這個周末終於實踐了一下(我之前把Bootstrap官網的Demo全看了一遍,一點沒研究的童鞋可能要看一下,不難的),感覺效果還可以,達到了我想要的簡約風格(其實對我這樣的前端瞎來說,搞復雜的也搞不來)。好了,廢話不講了,直接上成品圖了。感興趣童鞋也們也可直接看真身:傳送門http://heku.hk-001.jd43.com/(自己的域名暫時還沒綁上去)

1、有圖有真相

這是首頁(也不知道首頁該怎么搞,最后就搞成這樣了)

這是博客頁面(數據來自博客園Rss)

這是微博頁面(圖省事,直接放了一個新浪開放平台組件)

還有兩個:實驗室(實驗室我是打算留做一些示例的)和關於就不貼了。

2、源碼簡單介紹

從上圖中,細心的朋友也能看出來,我其實這里只是一些展示,沒有做數據存儲,所以源碼其實很簡單,不介紹大家都看得懂。不過還是跑馬燈的快速過一遍吧,由於本人在mvc方面研究不深,如果有能優化的地方,還請大家指點。

首先網站結構如下(除了MVC自帶的那些,多出的部分已經標出來了):

ErrorFilter文件,用來自定義異常時處理,這里只是增加了異常時發送郵件給我的邏輯。

AppHelper文件,我一般喜歡用一個叫AppHelper的文件來讀寫配置文件,這樣配置里相關節點改名稱的話,項目里也只是這個類中要改一下,其他引用處都不用改。

MailHelper文件,簡單封裝了微軟的WebMail類,大家運行前記得配置一下這里的郵箱信息,為什么不放在Web.Config里呢,因為有密碼啊,上傳到那種便宜主機里太。。。

XMLHelper文件,解析博客園Rss的,Models文件夾下的BlogModel是我對照着博客園Rss寫的實體類。

3、幾個小問題

1、在實現過程中,遇到一個問題,就是菜單的選中狀態處理(首頁時“首頁”菜單選中,博客頁“博客”菜單選中)。

菜單我是放在一個分部視圖(_Navbar.cshtml)里的,在不同的頁面選中不同的菜單,我是通過在每個菜單生成時都判斷Action名稱來做的:

@helper CheckRoute(string action)
    {
        bool result = string.Equals(action, Request.RequestContext.RouteData.Values["action"].ToString(), StringComparison.OrdinalIgnoreCase);
        if (result)
        {<text>class="active"</text>}
}
<div class="navbar navbar-inverse navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            <a class="brand" href="@Url.Action("Index", "Home")" tabindex="-1">HEKU</a>
            <ul class="nav">
                <li @CheckRoute("Index")><a href="@Url.Action("Index", "Home")" tabindex="1">首頁</a></li>
                <li @CheckRoute("Blog")><a href="@Url.Action("Blog", "Home")" tabindex="2">博客</a></li>
                <li @CheckRoute("Weibo")><a href="@Url.Action("Weibo", "Home")" tabindex="3">微博</a></li>
                <li @CheckRoute("Lab")><a href="@Url.Action("Lab", "Home")" tabindex="3">實驗室</a></li>@*laboratory*@
                <li @CheckRoute("About")><a href="@Url.Action("About", "Home")" tabindex="5">關於</a></li>
            </ul>
        </div>
    </div>
</div>

不知道有沒有更好的辦法?大家平時都是怎么做的啊?

2、在自定義日志攔截器的過程中,也遇到了一個問題,最終未解決,還請大家支招!

下面是這個類的代碼(就是增加了異常時發送郵件的邏輯):

    public sealed class ErrorFilter : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);

            //異常信息
            StringBuilder content = new StringBuilder("================Exception================");
            content.Append("<hr/>");
            content.AppendFormat("ExceptionTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            content.Append("<hr/>");
            content.AppendFormat("Message:{0}", filterContext.Exception.Message);
            content.Append("<hr/>");
            content.AppendFormat("Source:{0}", filterContext.Exception.Source);
            content.Append("<hr/>");
            content.AppendFormat("StackTrace:{0}", filterContext.Exception.StackTrace);
            content.Append("<hr/>");
            content.AppendFormat("AccessIp:{0}", filterContext.HttpContext.Request.UserHostAddress);

            //發送郵件
            SendMailAsync(content.ToString());
            //ThreadPool.QueueUserWorkItem(new WaitCallback(SendMailAsync), content.ToString());  //異步處理報錯,何解?
        }

        private void SendMailAsync(object body)
        {
            try
            {
                MailHelper.SendMail(AppHelper.MailTo, "網站異常", body as string);
            }
            catch
            { }
        }
    }

問題就是圖中注釋掉的部分,原本是想讓這個郵件發送是異步來執行。結果不行,報錯!知道為什么的請告訴我一下。(錯誤重現的方式:先把MailHelper里配置好,再把Web.Config里郵件接收人配置一下,把上面代碼處同步改成異步,然后在Action里隨便拋一個異常。)

4、拿到源碼怎么“去何苦化”

如果你感覺頁面效果還行,想在此基礎上改改,那么:

首先,你要把Web.Config里的這三處改成自己的。(Rss名稱空間不用改,大家都一樣的應該),改完之后博客頁應該就是你的博文了。

    <!--博客園博客Rss-->
    <add key="Rss" value="http://feed.cnblogs.com/blog/u/93918/rss"/>
    <!--博客Rss的名稱空間-->
    <add key="XMLNS" value="http://www.w3.org/2005/Atom"/>
    <!--系統異常時,接收異常信息的郵箱-->
    <add key="MailTo" value=""/>

然后就是把MailHelper類配置一下:

        static MailHelper()
        {
            //============================請自行配置此處啊啊啊=========================
            WebMail.SmtpServer = "";
            WebMail.SmtpPort = 0;
            WebMail.UserName = "";
            WebMail.Password = "";
            WebMail.From = "";
            WebMail.SmtpUseDefaultCredentials = true;
        }

再去新浪微博(或其他微博)開放平台找一下微博秀組件(新浪的http://app.weibo.com/tool/weiboshow),生成一下腳本代碼,然后替換掉Weibo.cshtml里的相關代碼,此時微博頁面也是你的了。(順便提醒一下,微博的這個組件本地調試時可能顯示不出來,不知道為什么,網上找答案時也看到有人遇到過。)

剩下還有首頁與關於兩個頁面,大家直接改Index.cshtml和About.cshtml吧。

5、源碼

源碼下載(內有驚喜,請自行發現~),如果哪位童鞋在此基礎上做出改進了(無論功能或效果),也請到時帶我分享一下啊~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM