日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET 中执行 URL 重写

發布時間:2023/12/2 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET 中执行 URL 重写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:overred?? 來源:原創
URL 重寫就是把URL地址重新改寫(汗^_^)。
詳情:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
優點:把url縮短等
用法:1.下載ms的URLRewrite.dll,放到你的bin下
2.在web.config里設置如下:
<?xml?version="1.0"?encoding="utf-8"??>
<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>

然后在cs里寫:

private?void?Page_Load(object?sender,?System.EventArgs?e)
{
????
//?在此處放置用戶代碼以初始化頁面
????Response.Write(Request.QueryString["id"]+"<BR>");
????Response.Write(
"haha");
}


只要輸入

localhost/overred/d123.aspx(注意:開頭必須為d,后為數字)
其實這個d123.aspx是虛擬的,并不是實際存在的。只要符合格式就行。

他就會跳到http://localhost/overred/default.aspx

而且他在default里可以捕捉一些參數比如id,就是你的d后的數字(后必須為數字),這樣你就可以顯示id為123的文章。

在重寫后的url里如果產生回發將會傳遞到d123.aspx,這樣用戶在點button時會看到哪個實際的地址,msdn上說的:但從用戶的角度考慮,如果單擊按鈕時突然看到 URL 更改會使他們感到不安。

可見ms把客戶捧為他的上帝!(真的?#¥%……—*)

繼續引用ms:

出現這種情況的原因是:在呈現 Web 窗體時,它會將其操作屬性直接設置為 Request 對象中文件路徑的值。當然,在呈現 Web 窗體時,URL 已從 /Products/Beverages.aspx 重寫為 ListProductsByCategory.aspx?CategoryID=1,這表明 Request 對象報告用戶要訪問 ListProductsByCategory.aspx?CategoryID=1。只需使服務器端窗體不呈現操作屬性即可解決此問題。(默認情況下,如果窗體不包含操作屬性,瀏覽器將會回發。)

不幸的是,Web 窗體不允許您明確指定操作屬性,也不允許您設置某些屬性以禁用操作屬性的呈現。因此,我們必須自己來擴展 System.Web.HtmlControls.HtmlForm 類,覆蓋 RenderAttribute() 方法并明確指出它不會呈現操作屬性。

由于繼承功能,我們可以獲得 HtmlForm 類的所有功能,并且只需添加幾行代碼即可獲得所需的行為。以下顯示了自定義類的完整代碼:

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);
????????}

????}

}

已被覆蓋的 RenderAttributes() 方法的代碼僅包含 HtmlForm 類的 RenderAttributes() 方法的準確代碼,而不設置操作屬性。(我使用 Lutz Roeder 的 Reflector 來查看 HtmlForm 類的源代碼。)

創建此類并對其進行編譯之后,要在 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>

以上的是繼承個form,其實還有更簡單的,就是繼承page,這樣你不需要在aspx頁中改任何東西。
代碼:

using?System;
using?System.IO;
using?System.Web;
using?System.Web.UI;

namespace?URl
{
????
/**//**//**////?<summary>
????
///?頁面基類
????
///?</summary>

????public?class?OLPage?:?Page
????
{
????????
public?OLPage()
????}

}



????
/**//**//**////?<summary>
????
///?重寫默認的HtmlTextWriter方法,修改form標記中的value屬性,使其值為重寫的URL而不是真實URL。
????
///?</summary>
????
///?<param?name="writer"></param>

????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)
????????
{
????????
//?如果當前輸出的屬性為form標記的action屬性,則將其值替換為重寫后的虛假URL
????????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,以后只要添加引用就可以拉!
ok ,it is so easy!

轉載于:https://www.cnblogs.com/wenanry/archive/2006/10/29/543182.html

總結

以上是生活随笔為你收集整理的ASP.NET 中执行 URL 重写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。