一千萬個為什麽

搜索

為什麽ASP.Net MVC2區域控制器操作可以調用而不包括url路徑中的區域?

我剛剛安裝了Visual Studio 2010並創建了一個新的MVC2項目,以便我可以了解更改和更新,並發現了一些我不確定要做什麽的方面的問題。

  1. 我創建了一個新的EMPTY MVC2項目
  2. 我右鍵單擊了該項目,並從上下文菜單中添加了一個名為“Test”的新區域
  3. 在新的測試區域,我添加了一個名為“Data”的控制器。

代碼是:

public class DataController : Controller
{
    //
   //GET: /Test/Data/

    public ActionResult Index()
    {
        Response.Write("Hi");
        return new EmptyResult();
    }
}

現在,我編譯並調用此地址: http:// localhost/mytest/test/data 並獲取輸出:

Hi

都好。現在我稱之為: http:// localhost/mytest/data 並獲得相同的回復!我以為路由應該照顧這個?我忽略了什麽嗎?或者MVC2的默認項目設置忽略了什麽?

最佳答案

這是故意的。 Global.asax中的默認路由不會將其搜索限制為特定區域或命名空間集。 MapRoute有重載(參見 MSDN上的一個示例名稱空間參數,可用於消除此請求所指的控制器的歧義。但即便如此, namespaces 參數只是提示要先搜索哪些名稱空間;這不是限制。

簡而言之,在MVC中,您必須為任何路由器擊中任何控制器做好準備。這就是為什麽所有MVC文檔都聲明安全性和其他邏輯應該在控制器級別完成,而不是在路由級別。

轉載註明原文: 為什麽ASP.Net MVC2區域控制器操作可以調用而不包括url路徑中的區域?