擴充套件方法 之 Redirect 篇

2022-01-31 04:47:48 字數 3394 閱讀 8831

前言:

單看標題,可能很多朋友不知道我到底想寫什麼。在寫這篇文章前,我自己跟自己鬥爭了很久,到底該不該寫這篇文章?畢竟從現實主義來看,這篇文章可能落入「瞎扯淡」的行列,因為對大多數朋友來說,以下的所有擴充套件方法可能都不會用到。

如果真是這樣,就當作乙個「漫無邊際」的想法來看好了。如果你根本不想浪費你的寶貴時間,就點這裡redirect回主頁,呵呵

乙個 redirect 為什麼也可以耗費一篇文章的筆墨?

就 redirect 一詞成文的先例估計不會是我,但如果 擴充套件方法 + redirect 這個話題,我可能就是第一人了

葫蘆裡賣的是什麼藥?

這個「漫無邊際」的想法實現的效果是:

如果頁面是foo.aspx,

public 

actionresult index()

); return redirecttoaction("actionname");

}

不懂 asp.net mvc 的朋友也沒關係,因為本文實際上跟 asp.net mvc 完全沒關係,跟稍後講 webform 的 view 擴充套件方法也完全是沒有任何一點關係,僅是方法名相同而已。

如何實現?

對於最簡單的情況:頁面在根目錄,就直接根據類名 + ".aspx"返回就可以了

}但如果是多層目錄:

如何根據型別來返回我們需要的頁面 url 呢?那麼我們得變通一下才行。怎麼變通?就是把命名空間也扯上來:

例如這裡home資料夾裡的index.aspx 頁面後台的命名空間是 redirecttests.views.home,就根據這個命名空間和類名來拼裝出 "~/views/home/index.aspx" 還不簡單嘛。

示例**:

}以上**限制路徑只能在 views 資料夾下了,有興趣的朋友不妨改改。

如何為 url 新增查詢字串?

啥?這也是乙個問題?我見過不少朋友寫查詢字串時基本上是這樣寫的:

string url = "~/foo.aspx?param1=" + value1 + "¶m2=" + value2 ...;
或者,想寫美觀一點的朋友就這樣寫:

string url = string.format( "~/foo.aspx?param1=¶m2=" , value1, value2);
當查詢字串比較長時,那可就有些亂了。個人覺得以asp.net mvc 那種形式來書寫很不錯,這就產生另乙個「漫無邊際」的想法,請看下面的寫法:

this.url(new );
當然,執行效率肯定稍遜一籌啦,因為用了反射(題外話,其實大家可以不必聞「射」喪膽,老趙的關於快速反射的開源專案很好很強大)。

拼裝查詢字串

///

///

///

///

public static string toquerystring(this t model)

); if (sb.length > 0)

}return sb.tostring();

}/// ///

url編碼

}以上**關於 url 編碼的部分,你可以看到如果是datetime型別轉字串時,這裡進行特定格式的轉化。因為如果不這樣轉化,當獲取這個datetime型別時,不能保證能從字串轉回正確的datetime。

那麼,有了上面介紹,自然而然一堆擴充套件方法就呼之欲出了:

結束?當然沒結束。以上的 url 返回的只能是.aspx的頁面,那麼ihttphandler 的情況呢?

string handlerurl = this.url();
最終也可以實現以上效果,但是url 方法就要適當改改了,這裡我就不再貼**了。
總結:最後還是要說的是,這是乙個「漫無邊際」的想法。

如果想看其他不那麼「漫無邊際」的文章,下面有另外幾篇

:擴充套件方法 之 基本資料篇

擴充套件方法 之 asp.net篇

擴充套件方法、介面和繼承帶來的有趣現象

ThinkPHP的redirect方法總結

首先我們大家都知道,redirect 是起到重定向的作用的乙個函式。我們需要注意在它使用的過程中的一些易錯點。下面是它的兩種使用方法 為了方便我直接從官網中複製過來了 重定向到new模組的category操作 this redirect new category array cate id 2 5,...

Django之redirect實現原理

又稱為客戶端重定向 該方法通過修改http協議的header部分,對瀏覽器下達重定向指令的,讓瀏覽器對在location中指定的url提出請求,使瀏覽器顯示重定向網頁的內容。該方法可以接受絕對的或相對的urls。如果傳遞到該方法的引數是乙個相對的url,那麼web container在將它傳送到客戶...

forward與redirect之區別

forward方式 request.getrequestdispatcher somepage.jsp forwardrequest,response redirect方式 response.sendredirect somepage.jsp forward是伺服器內部重定向,程式收到請求後重新定向...