亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net下實現URL重寫技術的代碼

2024-07-10 13:22:36
字體:
來源:轉載
供稿:網友
URL 重寫是截取傳入 Web 請求并自動將請求重定向到其他 URL 的過程。
  比如瀏覽器發來請求hostname/101.aspx ,服務器自動將這個請求中定向為?id=101。

url重寫的優點在于:
    縮短url,隱藏實際路徑提高安全性
    易于用戶記憶和鍵入。 
    易于被搜索引擎收錄

二 實現url重寫的基本方法
   下載MS的URLRewriter.dll,放到你的web程序的bin下
下載地址1:
下載地址2:download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi

下載完成后,在web.config里設置如下:
<?xml version="1.0" encoding="utf-8" ?>
<!--overred-->
<configuration>
    <configSections>
        <section name="RewriterConfig"type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
    </configSections>
    <RewriterConfig>
        <Rules>
            <RewriterRule>
                <LookFor>~/d(/d+)/.aspx</LookFor>
                <SendTo>~/default.aspx?id=$1</SendTo>
            </RewriterRule>
        </Rules>
    </RewriterConfig>
    <system.web>
        <httpHandlers>
            <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
        </httpHandlers>
    </system.web>
</configuration>


其中
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

用于指定配置節"RewriterConfig"的處理程序類的名稱為”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,該類存在于bin目錄下的URLRewriter .dll文件中

關鍵的是這兩句
<LookFor>~/d(/d+)/.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>

<LookFor>~/d(/d+)/.aspx</LookFor>表示,用戶輸入的url,d(/d+)/.aspx是 url中文件名匹配的正則表達式(此處為字母d開頭,后面跟一個或多個數字,并以.aspx結尾。用戶也可根據自己的需要自行設定)。
<SendTo>~/default.aspx?id=$1</SendTo>,表示當服務器接收到符合上面條件的請求后如何重寫url。此處表示訪問defalutl.aspx并傳入參數id,其值$1將用用戶請求的文件名中的第一個數字來表示。
例如用戶輸入 hostname/d11.aspx,服務器會把他重寫為?id=11。換句話說用戶輸入http: //hostname/d11.aspx,實際訪問的是?id=11。這樣就起到了隱藏真實文件名,并便于用戶記憶的作用。

處理回發
在重寫后的url里如果產生回發,例如有一個按鈕,又調用了該被重寫的aspx,用戶瀏覽器中將會顯示該aspx文件實際的地址,也就是http: //hostname/default.aspx?id=11。但從用戶的角度考慮,如 果單擊按鈕時突然看到 URL 更改會使他們感到不安。因此必須解決這個問題。
解決方法有二:
(1)自己定義一個Actionlessform類,在aspx中不再使用系統提供的form 標記

namespace ActionlessForm 
{
    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);
         }
    }
}

創建此類并對其進行編譯之后,要在 ASP.NET Web 應用程序中使用它,應首先將其添加到 Web 應用程序的 References 文件夾中。然后,要使用它來代替 HtmlForm 類,做法是在 ASP.NET 網頁的頂部添加以下內容:

<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
然后,將 <form runat="server">(如果有)替換為:<skm:Form id="Form1" method="post" runat="server"> 
并將右邊的 </form> 標記替換為:</skm:Form>

個人并不推薦該方法
(2)第二種方法就是繼承page,這樣你不需要在aspx頁中改任何東西。
代碼:
using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
    public class OLPage : Page
    {
        public OLPage()
        {}
        protected override void Render(HtmlTextWriter writer)
        {
            if (writer is System.Web.UI.Html32TextWriter)
            {
                writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
            }
            else
            {
                writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
            }
            base.Render(writer);
        }
    }

    internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
    {
        private string _url; // 假的URL

    internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
    {
        _url = HttpContext.Current.Request.RawUrl;
    }

    public override void WriteAttribute(string name, string value, bool encode)
    {
        if (_url != null && string.Compare(name, "action", true) == 0)
        {
            value = _url;
        }
        base.WriteAttribute(name, value, encode);

        }
    }

internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
    private string _url;
    internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
    {
        _url = HttpContext.Current.Request.RawUrl;
    }

    public override void WriteAttribute(string name, string value, bool encode)
    {
        if (_url != null && string.Compare(name, "action", true) == 0)
        {
            value = _url;
        }
        base.WriteAttribute(name, value, encode);
    }
}

}

把這個文件編譯成dll,并在你的項目中引用它。

然后把項目中的所有aspx文件對應的cs文件中的繼承page類的代碼改寫為繼承OLPage。
例如
public class WebForm1:page
改寫為
public class WebForm1:URL.OLPage

這樣就解決回發問題。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩精品在线观看| 日韩在线观看视频免费| 亚洲一区二区三区在线免费观看| 日韩美女视频免费在线观看| 日韩av在线一区二区| 亚洲人午夜精品免费| 久久久精品免费视频| 日韩美女福利视频| 免费av在线一区| 亚洲精品720p| 国产精品海角社区在线观看| 人妖精品videosex性欧美| 国产精品视频1区| 精品国产一区二区三区久久狼黑人| 欧美人在线观看| 精品国产视频在线| 中文字幕亚洲情99在线| 日韩久久精品电影| 亚洲久久久久久久久久| 丝袜情趣国产精品| 日韩成人中文字幕在线观看| 欧美黑人性视频| 亚洲午夜av久久乱码| 国产欧美在线看| 亚洲色图狂野欧美| 在线中文字幕日韩| 九九热这里只有在线精品视| 欧美做受高潮电影o| 日韩电影在线观看永久视频免费网站| 成人黄在线观看| 伊人久久大香线蕉av一区二区| 成人午夜激情免费视频| 亚洲第一男人天堂| 亚洲欧美另类国产| 久久成人精品一区二区三区| 国自产精品手机在线观看视频| 欧美日韩中文字幕在线视频| 欧美理论在线观看| 成人国产精品日本在线| 懂色av影视一区二区三区| 日韩av手机在线观看| 国产精品久久久久久一区二区| 麻豆国产精品va在线观看不卡| 青青草国产精品一区二区| 欧美日韩一二三四五区| 亚洲男女性事视频| 日韩av在线看| xvideos国产精品| 孩xxxx性bbbb欧美| 黑人巨大精品欧美一区二区三区| 久久激情五月丁香伊人| 日韩激情av在线播放| 亚洲丁香久久久| 亚洲直播在线一区| 国产精品久久久久久久久久小说| 国产欧美一区二区三区在线| 日本道色综合久久影院| 亚洲精品福利视频| 亚洲深夜福利在线| 欧美午夜激情视频| 日韩三级成人av网| 欧美激情视频一区| 欧美午夜丰满在线18影院| 欧美成人精品不卡视频在线观看| 一区二区日韩精品| 欧美一区三区三区高中清蜜桃| 欧美精品久久久久久久久久| 亚洲欧美激情另类校园| 91在线观看免费高清完整版在线观看| 久久精品色欧美aⅴ一区二区| 欧美高清videos高潮hd| 亚洲sss综合天堂久久| 国产精品第三页| 亚洲欧美国产精品久久久久久久| 久久免费精品日本久久中文字幕| www.久久色.com| 日韩精品在线观看网站| 日韩最新av在线| 亚洲全黄一级网站| 亚洲国产日韩一区| 久久九九国产精品怡红院| 亚洲激情视频在线| 欧美日韩另类视频| 国产精品美女久久久久av超清| 黑人极品videos精品欧美裸| 亚洲天堂av在线免费| 91久久久在线| 成人久久久久久| 久久九九免费视频| 欧美激情第一页xxx| 欧美日韩国产色| 国产成人精品综合| 国产精品久久久久久中文字| 亚洲成人久久网| 国产成人精品最新| 成人a视频在线观看| 丝袜亚洲欧美日韩综合| 国产成人精品久久亚洲高清不卡| 日韩中文字幕在线视频播放| 最好看的2019年中文视频| 欧美成人精品一区二区三区| 亚洲aⅴ日韩av电影在线观看| 欧美老肥婆性猛交视频| 亚洲免费一在线| 97色在线观看| 日韩av一区二区在线| 在线观看不卡av| 国产精品视频999| 青青草精品毛片| 欧洲成人午夜免费大片| 欧美高清性猛交| 91精品视频大全| 中文字幕日韩欧美精品在线观看| 亚洲最大福利视频| 亚洲免费av片| 久久久久久高潮国产精品视| 在线观看国产欧美| 久久精品美女视频网站| 宅男66日本亚洲欧美视频| 国产精品户外野外| 国产午夜精品全部视频在线播放| 精品久久久久久久久久久| 欧美俄罗斯乱妇| 欧美日韩成人免费| 91av视频在线观看| 国产成人高清激情视频在线观看| 色午夜这里只有精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 精品偷拍一区二区三区在线看| zzjj国产精品一区二区| 亚洲欧美精品一区二区| 国产成人免费91av在线| 欧美极品少妇xxxxⅹ喷水| 久久久999精品| 国产精品亚洲欧美导航| 国产精品视频免费在线观看| 亚洲成人久久一区| 欧美精品电影在线| 欧美网站在线观看| 亚洲黄在线观看| 日韩一区二区三区在线播放| 国产精品精品一区二区三区午夜版| 欧美激情中文网| 国产精品一区二区久久久| 日韩视频精品在线| 九九热在线精品视频| 亚洲精品www久久久久久广东| 欧美视频在线看| 日韩av网站导航| 亚洲天堂2020| 欧美激情视频在线| 久久中国妇女中文字幕| 国产啪精品视频网站| 国产综合香蕉五月婷在线| 国产有码在线一区二区视频| 国产成人综合精品在线| 国产精品ⅴa在线观看h| 欧美成人免费全部| 亚洲色图18p| 欧美午夜宅男影院在线观看| 亚洲午夜未删减在线观看| 欧美日韩一区二区在线播放| 精品国产一区二区三区四区在线观看| 国产精品久久久久久久久久久新郎|