asp.net forums中的UrlRewrite拾錦

來源:互聯網
上載者:User

一開始,當然從HttpModule開始,就是類ForumsHttpModule

(不能忽略ForumConfiguration.cs這個熱門檔案,裡面的代碼比較簡單,就不說了)

-->Init()函數,其中掛鈎事件到application上,再定義了兩個timer定時器,每15分鐘一次

-->根據application事件的先後順序,首先是Application_BeginRequest()

-->其中調用了RewriteUrl()函數

-->再調用Globals.GetSiteUrls();(中間過渡)

-->再調用SiteUrls:SiteUrls();讀取SiteUrls.config檔案,即URL的變換規則

-->返回後,才開始真正的重寫工作,代碼全在ReWrittenUrl.cs檔案

     熟悉的人其實一看SiteUrls.config就知道怎樣操作了,因為沒有像dottext那樣太類化,只是命名有點亂

~~~~~~~~~~~~~不過不要忽略這一小段代碼

    ForumContext frmContext = CreateForumContext(context);
    frmContext.CurrentUrl = context.Request.RawUrl.ToString();

    // 2005/04/07
    //safe to set url rewrite data;
    if(isReWritten && newPath != null)
    {
     frmContext.IsUrlReWritten = true;
    }

還有就是web.config裡的<pages validateRequest="false" autoEventWireup="true" pageBaseType="AspNetForums.Components.ForumPage, AspNetForums.Components" />

其中類ForumPage擴充自page類,實現為改寫action屬性為變更後的url,這是asp.net自添加的屬性,用於自post

~~~~~~~~~~~~~~~~~~~~~~~~~~~

-->接下看還有一個重要的函數是CaptureForumPingback()

     其實現RSS訂閱,注意不是文章的訂閱,而是每個版塊右上方的RSS訂閱

-->其中ForumsDataProvider dp = ForumsDataProvider.Instance();返回的其實是SqlDataProvider類

     下面那句dp.RssPingback(pingbackList);調用儲存過程forums_Forum_RssPingback_Update更新表forums_ForumPingback記錄

     這裡的功能似乎只是更新RSS訂閱的次數就了事了

-------------------------------------------------

按時間順序,接著是Application_AuthenticateRequest()

-->其中判斷驗證方式,如為passport/negotiate可見下載包附帶的“Itelite Passport使用說明”

-->最後,無論哪種驗證模式,都在roles.GetUserRoles()裡context.User = new GenericPrincipal(context.User.Identity, roleArray );

-------------------------------------------------

接著是Application_AuthorizeRequest(),跟蹤匿名使用者(這部分沒有細看,單從兩三個函數還搞不清來龍去脈),並判斷使用者有否訪問頁面的許可權,沒有轉向登出頁面

-------------------------------------------------

接著,在離開HttpModule之前,再回過頭來看兩個定時器實現的功能

-->emailTimer掛載ScheduledWorkCallbackEmailInterval(),實現 郵件發送/匿名線上更新

-->Emails.SendQueuedEmails( (HttpContext) sender);

     將郵件暫存於資料庫,然後用定時器實現郵件群發,是一種常用技術。這裡把類MailMessage派生一個新類EmailTemplate,實現記錄發送失敗次數的做法,值得借鑒;還有一點就是用fields屬性實現SMTP伺服器的使用者驗證

-->statsTimer掛載ScheduledWorkCallbackStatsInterval(),實現 索引和統計資訊

-->其中Search.IndexPosts( (HttpContext) sender, 100);

     ANF的類比全文檢索搜尋就從這裡出發,其過程原理hidotnet已有詳細論述,實現為每過15分鐘對最新的100個貼子進行索引更新

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.