發表文章

目前顯示的是 六月, 2019的文章

關於MVC Area Routing的怪異問題

圖片
問題 同事反應了一個關於MVC Area的怪異問題。客戶自行輸入一個不存在的網址,本應該出現404找不到,但卻發生Exception。如下圖,找到JiahuaController的Index,但找不到View。

原因
Route往子層的Area比對到了,專案的層級如下: Root/Home/Index Kim(Area/Jiahua/Index 一般來說,瀏覽/Jiahua會比對到上層預設的Route,而透過namespace的限制,照理來說不會往Area比對才對。如下圖,結果,它是在此namespace比對不到後,又往area的contoller尋找...昏。



解決方式 以下兩個擇一即可解決:
1.透過自訂Route,只比對上層的Controller。ps:此方法不是最佳解,這是在找到最佳解前實作出來的。

/// <summary>     /// 此類別的建講式只會被執行一次     /// http://johnatten.com/2013/08/21/customizing-routes-in-asp-net-mvc/     ///  https://stackoverflow.com/questions/21583278/getting-all-controllers-and-actions-names-in-c-sharp/21583402     /// </summary>     public class IsRootController : IRouteConstraint     {         private Dictionary<string, string> _rootControllers = new  Dictionary<string, string>();         public IsRootController()         {             Assembly asm = Assembly.GetExecutingAssembly();             var _rootControllers = asm.GetTypes()                   .Where(type => typeof(Controller).IsAssi…