建立在迷你版 ASPNET MVC上的Web應用
在正式介紹我們自己創建的迷你版ASPNET MVC的實現原理之前不妨來看看建立在該框架之上的Web應用如何定義通過Visual Studio創建一個空的ASPNET Web應用(注意不是ASPNET MVC應用)並不會引用SystemWebMvcdll這個程序集所以在接下來的程序中看到的所謂MVC的組件都是我們自行定義的
首先定義了如下一個SimpleModel類型它表示最終需要綁定到View上的數據為了驗證針對Controller和Action的解析機制SimpleModel定義的兩個屬性分別表示當前請求的目標Controller和Action
public class SimpleModel
{
public string Controller { get; set; }
public string Action { get; set; }
}
與真正的ASP NET MVC應用開發一樣我們需要定義Controller類按照約定的命名方式(以字符Controller作為後綴)我們定義了如下一個HomeControllerHomeController實現的抽象類型ControllerBase是我們自行定義的以自定義的ActionResult作為返回類型的Index方法表示Controller的Action它接受一個SimpleModel類型的對象作為參數該Action方法返回的ActionResult是一個RawContextResult對象顧名思義RawContextResult就是將指定的內容進行原樣返回在這裡我們將作為參數的SimpleModel對象的Controller和Action屬性顯示出來
public class HomeController: ControllerBase
{
public ActionResult Index(SimpleModel model)
{
string content = stringFormat(Controller: {}<br/>Action:{}
modelController modelAction)
return new RawContentResult(content)
}
}
ASPNET MVC根據請求地址來解析出用於處理該請求的Controller的類型和Action方法名稱具體來說我們預注冊一些包含Controller和Action名稱作為占位符的(相對)地址模板如果請求地址符合相應地址模板的模式Controller和Action名稱就可以正確地解析出來和ASPNET MVC應用類似我們在Globalasax中注冊了如下一個地址模板({controller}/{action})我們還注冊了一個用於創建Controller對象的工廠RouteTableControllerBuilder和DefaultControllerFactory都是我們自定義的類型
public class Global : SystemWebHttpApplication
{
protected void Application_Start(object sender EventArgs e)
{
RouteTableRoutesAdd(default
new Route{Url = {controller}/{action}})
ControllerBuilderCurrentSetControllerFactory(
new DefaultControllerFactory())
}
}
正如上面所說的ASPNET MVC是通過一個自定義的HttpModule實現的在這個迷你版ASPNET MVC框架中我們也將其起名為UrlRoutingModule在運行Web應用之前我們需要通過配置對該自定義HttpModule進行注冊下面是相關的配置
<configuration>
<systemwebServer>
<modules>
<add name=UrlRoutingModule
type=WebAppUrlRoutingModule WebApp/>
</modules>
</systemwebServer>
</configuration>
到目前為止所有的編程和配置工作已經完成為了讓定義在HomeController中的Action方法Index來處理針對該Web應用的訪問請求我們需要指定與之匹配的地址(符合定義在注冊地址模板的URL模式)如圖所示由於在浏覽器中輸入地址(http://…/Home/Index)正好對應著HomeController的Action方法Index所以對應的方法會被執行而執行的結果就是將當前請求的目標Controller和Action的名稱顯示出來(S)
圖 采用符合注冊的路由地址模板的地址訪問Web應用
上面演示了如何在我們自己創建的迷你版ASPNET MVC框架中創建一個Web應用從中可以看到和創建一個真正的ASPNET MVC應用別無二致接下來我們就來逐步地分析這個自定義的ASPNET MVC框架是如何建立起來的而它也代表了真正的ASPNET MVC框架的工作原理
返回目錄ASPNET MVC 框架揭秘
編輯推薦
ASP NET開發培訓視頻教程
Microsoft NET框架程序設計視頻教程
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
From:http://tw.wingwit.com/Article/program/net/201311/16113.html