none
URL重写PathInfo异常问题 RRS feed

  • 问题

  • 怪异一:Page_Load事件里读取不到PathInfo信息..

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Web.Hosting" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
     protected void Page_PreRender(object sender, EventArgs e)
     {
     Response.Write(Request.PathInfo);
     }
     protected void Page_Load(object sender, EventArgs e)
     {
       Response.Write(Request.PathInfo);  
     }
    
     protected void Button1_Click(object sender, EventArgs e)
     {
       HttpContext.Current.RewritePath("~/Show.aspx", "a", "", true);
     }
    </script>
    
    <html >
    <head id="Head1" runat="server">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title></title>
    </head>
    <body>
     <form id="form1" runat="server">
     <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
     </form>
    </body>
    </html>
    怪异二:使用自定义的HttpModule处理,然后在HttpModule里的OnBeginRequest事件里进行如下重写操作

    ((HttpApplication)sender).Context.RewritePath("~/RunTime.aspx","","",false);
    //这里的第二个参数为PathInfo参数,特意设置为空值.
    然后在RunTime.aspx页面的Page_Load事件里
    Response.Write(Request.PathInfo);
    

    如果是在IIS5.1的环境下,RunTime.aspx页面输出的PathInfo值为空值,但如果放到IIS6.0的环境里后,就PathInfo莫名其妙的就有值了,类似于/9dfd442e26f45248aa6afd861f26c79c/这样的格式.

    怪异一的代码如果RewritePath时赋值为空值的话,IIS5.1和IIS6.0在输出时都没问题,都是正常的控制,但如果是在自定义HttpModule里RewritePath,并且PathInfo参数为空值的话,还是IIS6.0就会莫名奇妙的有个这样的值..

    这是什么原因造成的? 相同的代码,在IIS5.1和IIS6.0下结果不一样....

    如果IIS6.0环境下,在HttpModule里进行RewritePath时PathInfo参数为空就会自动有个类似于/9dfd442e26f45248aa6afd861f26c79c/这样格式的值的话,这个值是否有规律?

    运行环境:FrameWork版本4.0

     

    另外想请教,RewritePath的第四个参数到底干啥的啊,MSDN文档里的说明我看来看去最终还是没看明白....

    2011年3月14日 4:49