Tôi có một 2 ứng dụng ASP.NET MVC với một nhà máy điều khiển StructureMap tùy chỉnh để xử lý dependency injection cho bộ điều khiển của tôi:Làm thế nào để xử lý một ngoại lệ trong một nhà máy điều khiển ASP.NET MVC
public class StructureMapControllerFactory : DefaultControllerFactory
{
public override IController CreateController(RequestContext context, string controllerName)
{
Type controllerType = base.GetControllerType(context, controllerName);
return ObjectFactory.GetInstance(controllerType) as IController;
}
}
Tôi muốn để biết làm thế nào tôi có thể xử lý các trường hợp ngoại lệ trong nhà máy điều khiển này để chúng có thể được chuyển hướng đến ~/Views/Shared/Error.aspx giống như cách chúng nằm trong một bộ điều khiển có thuộc tính HandleError. Hiện tại, ngoại lệ không làm điều này mặc dù có thuộc tính CustomErrors được đặt thành "Bật".
Hiện tại tôi có thể tạo ngoại lệ như vậy bằng cách sử dụng URL như "~/DoesNotExist/edit/1". Với tuyến đường mặc định:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
MVC khớp với tuyến đường này và chuyển tên bộ điều khiển "DoesNotExist" tới nhà máy điều khiển của tôi. GetControllerType sau đó trả về null và gây ra một ngoại lệ tham chiếu null trong lệnh gọi đến StructureMap. Sau đó tôi muốn có thể xử lý ngoại lệ này.
Lưu ý rằng việc thêm lần bắt tiếp theo, tất cả tuyến đường sẽ không giải quyết được sự cố này - MVC khớp với tuyến đường mặc định.
Tôi biết tôi có thể giải quyết vấn đề này bằng cách đặt ràng buộc trên tuyến mặc định cho bộ điều khiển nhưng câu hỏi tổng quát hơn về cách tôi có thể sử dụng MVC ~/Views/Shared/Error.aspx bình thường trong nhà máy.
Lưu ý rằng tôi không muốn câu trả lời yêu cầu khớp nối chặt chẽ của nhà máy bộ điều khiển với ứng dụng MVC cụ thể. Lý tưởng nhất là nhà máy này phải ở trong một hội đồng tham chiếu không có trong cùng một giải pháp.
Vâng, cảm ơn vì đã chỉ cho tôi điều đó - một giải pháp rất hay cho vấn đề. –