我發現this documentation很混亂。請求URL「HelloWorld」如何在ASP.Net MVC中實例化HelloWorldController對象?
在我的ASP.NET MVC項目的Controllers文件夾創建一個文件
using System.Web;
using System.Web.Mvc;
namespace MvcMovie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public string Index()
{
return "This is my <b>default</b> action...";
}
//
// GET: /HelloWorld/Welcome/
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
後,我可以做一個URL請求到我的網站的子頁面HelloWorld
,顯然實例的HelloWorldController
對象創建並調用其方法Index()
。究竟發生了什麼對我來說是個謎。該文檔有一句簡單的說:
URL的第一部分決定了要執行的控制器類。 So/HelloWorld映射到HelloWorldController類。
但我不明白這是怎麼發生的。 MVC源文件中必須有其他位置,它會爲子頁面請求一個URL請求,並將其附加到「Controller」中,並尋找與Controller
類相同名稱的類。那種魔法在哪裏發生?另外,如何將其轉換爲運行時,因爲在運行時,源代碼中類的名稱已經滅絕/不相關?還是我完全糊塗了一切?
它的命名慣例,可以覆蓋所有這一切,但在asp.net.mvc很多邏輯通過默認它是通過命名約定完成的。因此,由於您正在請求一個名爲「HelloWorld」的頁面,因此它將查找HelloWorldController來實例化。 – Dzyann
你幾乎可以解釋你的問題中的高層次過程。我不確定要查找哪些特定的源文件來查找代碼,但如果您真的想要,我相信您可以找到它。顯然類名在運行時仍然是已知的,請考慮堆棧跟蹤。該信息包含在二進制文件中。 – evanmcdonnal
很久以前,當我開始使用MVC時,我發現Scott Hanselman的這段視頻非常清楚=> http://channel9.msdn.com/Blogs/matthijs/ASPNET-MVC-2-Basics-Introduction-by-Scott- Hanselman – Dzyann