小弟最近苦于学习asp.net伪静态方法,主要是通过重写浏览器地址来改变的。
我按照微软MSDN官方的URLRewriter文章介绍,下载并生成了URLRewriter.dll,并引入到了工程中。
下面我一个页面一个页面的贴代码,求给位老师指点,到底哪儿错了,方法用尽了都不能实现重写。
分不够,立刻追分第一个页面---index.html<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="page_index" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <asp:Repeater ID="Repeater1" runat="server">
       <HeaderTemplate>
       <table>
       <table width="400" border="0">
       </HeaderTemplate>
       <ItemTemplate>
       <tr>
    <td><table width="400" border="0" style="border-bottom:#CCCCCC 1px dashed">
      <tr>
        <td>
        </td><ASP:hyperlink   id=Hyperlink1   title='<%#DataBinder.Eval(Container.DataItem,"title").ToString()%>' runat="server" Text='<%#FormatString_Size_40(DataBinder.Eval(Container.DataItem,"title").ToString())%>'   NavigateUrl='<%#"~/web/new.aspx?id="+DataBinder.Eval(Container.DataItem,"id").ToString()%>'   NAME="Hyperlink1">   
         </ASP:hyperlink>
      </tr>
    </table></td>
  </tr> 
       </ItemTemplate>
       <FooterTemplate>
       </table>
       </FooterTemplate>
       </asp:Repeater></div>
    </form>
</body>
</html>
index.aspx.cs代码using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class page_index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Repeater1_Data_Bind();
    }
    void Repeater1_Data_Bind()
    {
        string str = "Server=(local);Uid=sa;password=sa;Database=ShuangLiuDB";
        string sql = "select TOP 20 * from News_Table order by dtt DESC";
        SqlConnection conn = new SqlConnection(str);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter(sql, conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "News_Table");
        DataTable dt = ds.Tables["News_Table"];
        this.Repeater1.DataSource = dt.DefaultView;
        this.Repeater1.DataBind();
    }    protected string FormatString_Size_40(string str)
    {
        if (str.Length > 20)
        {
            str = str.Substring(0, 19) + "...";
        }
        return str;
    }
}
显示具体内容的页面new.html<%@ Page Language="C#" AutoEventWireup="true" CodeFile="new.aspx.cs" Inherits="web_new" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate>
<table width="490" border="0" align="center" cellpadding="0" cellspacing="0">
        </HeaderTemplate>
        <ItemTemplate>     
  <!--DWLayoutTable-->
  <tr>
    <td width="490" height="25" valign="top"><%# DataBinder.Eval(Container.DataItem, "title")%></td>
  </tr>
  <tr>
    <td height="22" valign="top"><%# DataBinder.Eval(Container.DataItem, "dtt")%></td>
  </tr>
  <tr>
    <td height="190" valign="top"><%# DataBinder.Eval(Container.DataItem, "content")%></td>
  </tr>
        </ItemTemplate>
        <FooterTemplate>
        </table>
        </FooterTemplate>
        </asp:Repeater>
    
    </div>
    </form>
</body>
</html>
new.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;public partial class web_new : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        News_Bind();
    }
    void News_Bind()
    {
        string type = Request.QueryString["id"].ToString();
        string str = "Server=(local);uid=sa;password=sa;database=shuangliudb";
        string sql = "Select * from News_Table where id=" + type;
        SqlConnection conn = new SqlConnection(str);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter(sql, conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "News_Table");
        DataTable dt = ds.Tables["News_Table"];
        this.Repeater1.DataSource = dt.DefaultView;
        this.Repeater1.DataBind();
        
    }
}
web.config<?xml version="1.0" encoding="utf-8" ?>
<configuration>
        <configSections>
        <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
    </configSections>    <RewriterConfig>
        <Rules>
            <!-- Rules for Blog Content Displayer -->
                <RewriterRule>
                    <LookFor>~/web/new/(.[0-9]*)\.html</LookFor>
                    <SendTo>~/web/new.aspx?id=$1< ndTo>
                </RewriterRule>
        </Rules>
    </RewriterConfig>
    <appSettings>
        <add key="dbType" value ="sql"></add>
        <add key="data" value="server=.;uid=sa;pwd=sa;database=pubs;Connect Timeout=30;"></add>
    </appSettings>
  <system.web>
    <httpHandlers>
        <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
     <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    </httpHandlers>
我在IIS中已经添加了.html解析了请给位老师指点指点,谢谢!!!

解决方案 »

  1.   

    这个一般不是代码的问题可以检查一下:
    1)转向的正则表达式修改后可能要重设一下缓存,iisreset试试
    2)html解析是否加入了是否修改成与aspx一样的解析方式,是否加入了判断文件是否存在其他建议:
    1)添加一个new文件夹,里面放一个空的default.aspx
      

  2.   

    太长了,懒得看了。不妨试试UrlRewrite URL重写示例,还能了解重写的原理。这样遇到问题就不会不知道是哪里的问题了。
      

  3.   

    我认为这个不是代码的问题
    看是不是URLRewriter 的时候出现了问题
      

  4.   

    <RewriterConfig>
            <Rules>
                <!-- Rules for Blog Content Displayer -->
                    <RewriterRule>
                        <LookFor>~/web/new/(.[0-9]*)\.html</LookFor>
                        <SendTo>~/web/new.aspx?id=$1< ndTo>
                    </RewriterRule>
            </Rules>
        </RewriterConfig>
    这里写错了
      

  5.   

    自己实现Ihttphander接口来做,还能明白原理,干嘛要用人家的dll呢,也不能调试跟踪,出问题了也很难办