URL重写的问题 .NET

因为有个项目要用到URL重写,于是在网上搜一搜,发现网上说的很不清楚。 终于弄了一个网上,终于搞出来了。

1、在项目里的Bin文件下添加URLRewriter.dll  

下载地址 download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi 安装以后找到URLRewriter.dll  放到BIN下

2、在WebConfig中配置添加如下代码

1 <configuration>
2   <configSections>
3     <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
4 </configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />表示名为RewriterConfig的类在存在于bin目录下的URLRewriter .dll文件中。

3、在System.Web下添加一下节点
1  <httpHandlers>     
2       <add verb="*" path="*.whtml" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />      
3     </httpHandlers>

这里的意思就是把请求后缀为  .Whtml的web页面的http请求都给URLRewriter.RewriterFactoryHandler, URLRewriter 来处理。

注意这里path不要是.aspx, 否则会出现404错误的, 我开始没注意这个问题,可害惨我了。

4、URL重写

 <RewriterConfig>
    <Rules>
      <!--productlist.aspx?ptype=23-->
          
       <RewriterRule>
        <LookFor>~/newslist-(\d+)\.whtml</LookFor>       //这里是请求匹配   就是浏览器里的 .html  或者 .whtml网址
        <SendTo>~/newslist.aspx?ntype=$1</SendTo>          //  这里是真实的请求aspx 地址,  就是项目中.aspx页面地址
      </RewriterRule>                                     //  $1表示匹配的参数
      
       <RewriterRule>
        <LookFor>~/recruitdetails-(\d+)\.whtml</LookFor>                  
        <SendTo>~/recruitdetails.aspx?recid=$1</SendTo>
      </RewriterRule>
        <RewriterRule>
        <LookFor>~/productdetails-(\d+)-(\d+)\.whtml</LookFor>
        <SendTo> <![CDATA[productdetails.aspx?productid=$1&ptype=$2]]></SendTo>       //这里是传递 两个参数
      </RewriterRule>
       <RewriterRule>
        <LookFor>~/caselist-(\d+)\.whtml</LookFor>
        <SendTo>~/caselist.aspx?casetype=$1</SendTo>
      </RewriterRule>

        <RewriterRule>
        <LookFor>~/casedetails-(\d+)-(\d+)\.whtml</LookFor>
        <SendTo> <![CDATA[casedetails.aspx?caseid=$1&casetype=$2]]></SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFor>~/(.+)\.whtml</LookFor>
        <SendTo>~/$1.aspx</SendTo>
      </RewriterRule>
    </Rules>
  </RewriterConfig>

  

5、添加以下节点,就是为了把请求为.whtml的都由 IsapiModule来处理。

 <system.webServer>
        <defaultDocument>
            <files>
                <add value="index.aspx" />
            </files>
        </defaultDocument>
        <handlers>
            <add name="ww32" path="*.whtml" verb="GET,POST" modules="IsapiModule" scriptProcessor="C:\windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
        </handlers>
		
		
    </system.webServer>

这样就大功告成,就可以了。

 浏览器地址发送http://localhost:8056/about-1.whtml  http  请求,经过实际处理以后

地址就转换成  http://localhost:8056/about.aspx?id=1

 6、如果页面有分页控件的话还要处理一下

在原来你下载的项目里找到 ActionlessForm.dll 放到你的项目 bin 目录下。
然后在你的这个页面中加入:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
再把你的<Form>改为:
<skm:Form id="你的表单名" method="post" runat="server">

</skm:Form>

 

posted @ 2014-10-12 23:07  落日云烟  阅读(196)  评论(0编辑  收藏  举报