zoukankan      html  css  js  c++  java
  • asp.net forums中的UrlRewrite拾锦

    一开始,当然从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个贴子进行索引更新

  • 相关阅读:
    InnoSetup 打包代码 检测.netFramework
    PartialView中的页面重定向
    Cocos2dx 学习之引擎介绍
    30个高质量的免费jquery滑块PSD文件
    HBase Shell
    图灵百年诞辰 1912.6.232012.6.23
    常用的数据分页技术及比较
    Cocos2dx学习之windows 7的visual studo 2010开发环境安装
    C#实现简易ajax调用后台方法
    AJAX(Professional ASP.NET MVC 3
  • 原文地址:https://www.cnblogs.com/lwj/p/305174.html
Copyright © 2011-2022 走看看