• httpHandler和url映射打造自己的后缀网站


         原理的东西都被巨人将了,我站在巨人的肩膀上记录着成长的点滴,见.html、.aspx、.asp、.jsp等等后缀的网页不觉得新鲜,可上校内就觉得.do网页后缀值得思考,.do难道是校内自己的开发平台,不可能吧,校内有这么强悍。突然某一天让我看到了msdn的这边文章:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true,一切才变得豁然开朗。一个URLRewrite.dll就把所有的问题解决。下面主要从三个地方来谈谈实现细节。
    1、httpHander添加自己的后缀。
    所有配置的前提都是添加了URLRewrite.dll引用的情况为依据的,这里我添加.html和.do的后缀,首先在配置文件<httpHandlers>中添加<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
                <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
                <add verb="*" path="*.do" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />,然后打开iis,定位到虚拟目录,配置,映射,添加,在扩展名中添加上.do,可执行文件就跟.aspx的可执行文件目录一样,可以从哪里复制过来。然后把下面的确认文件是否存在的勾去掉。现在.do或者.html就是能被阅览器解释执行的网页后缀了。
    2、通过映射来实现假路径替换真路径
    现在我们应该可以输入http://localhost/default.do可以访问default.aspx页面,这就是映射。首先在<configSections>下添加自定义节点<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />,在从与<web.config>平行的地方添加映射规则:
    <RewriterConfig>
            <Rules>
                <RewriterRule>
                    <LookFor>~/("w{4})/("w{2})/("w{2})/("w{2})/index".html</LookFor>
                    <SendTo>~/MoreLevelUrlWrite.aspx?year=$1&amp;month=$2&amp;day=$3&amp;id=$4</SendTo>
                </RewriterRule>
                <RewriterRule>
                    <LookFor>~/("d{4})".aspx</LookFor>
                    <SendTo>~/OneLevel.aspx?year=$1</SendTo>
                </RewriterRule>

                <RewriterRule>
                    <LookFor>~/("d{4})/("d{2})/Default".aspx</LookFor>
                    <SendTo><![CDATA[~/MoreLevelUrlWrite.aspx?year=$1&month=$2]]></SendTo>
                </RewriterRule>

                <RewriterRule>
                    <LookFor>~/default.do</LookFor>
                    <SendTo>~/default.aspx</SendTo>
                </RewriterRule>
            </Rules>
        </RewriterConfig>
    这段配置节是从我的config中copy下来的,最后一个配置节就是实现default.do到default.aspx的映射。
    3、处理回送情况
    我们输入http://localhost/default.do实际是访问的是default.aspx那么如果default.aspx有postback情况,那肯定有postback到default.aspx路径了,这很不利于用户体验,解决这问题得重写web窗体,新建一个项目:ActionlessForm,建一个类Form继承htmlForm,重写RenderAttributes方法。具体代码如下: public class Form : System.Web.UI.HtmlControls.HtmlForm
        {
            protected override void RenderAttributes(HtmlTextWriter writer)
            {
                writer.WriteAttribute("name", this.Name);
                base.Attributes.Remove("name");

                writer.WriteAttribute("method", this.Method);
                base.Attributes.Remove("method");

                this.Attributes.Render(writer);

                base.Attributes.Remove("action");

                if (base.ID != null)
                    writer.WriteAttribute("id", base.ClientID);
            }
        }
    然后default.aspx所在项目添加刚建项目的引用,把default.aspx的窗体替换下来,在default.aspx中页头:<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
    在把<form ranat=server></form>改成<skm:Form id="form" runat="server"></skm:Form>,其他地方不用修改。

    当我花一天时间把这些内容搞清楚,并用了一定的映射机制把我们公司网站url全部重写下来的时候,那种心情没人知道的。

    还是打个包上来吧,还可以把路径中的文件名隐藏的,就是得配一个虚拟路径,牺牲很大,没那样实现了。https://files.cnblogs.com/medal/HttpHander.rar

  • 相关阅读:
    微软发布3款SQL Injection(SQL 注入)攻击检测工具
    TortoiseSVN 使用介绍
    windows下的Bug跟踪管理软件Bugfree的安装
    国内PHP开源建站程序一览
    55个经典开源Windows工具
    JavaScript代码格式化工具(JS代码分析必备)
    Javascript工具 使用packer来压缩JS文件
    开源UML设计工具StarUML
    看似简单的问题其实不简单
    Javascript工具 使用JSDoc建立JavaScript代码的文档
  • 原文地址:https://www.cnblogs.com/medal/p/1268869.html
Copyright © 2020-2023  润新知