2010-06-25 19 views
9

Ok, vì vậy, tôi bị vướng vào vấn đề này. Tôi đã thấy rất nhiều thứ có thể giải quyết vấn đề này, nhưng tôi không nhận được một giải pháp có thể đáp ứng các yêu cầu của tôi.Ngừng ngoại trừ việc bị ném đối với bộ điều khiển không tồn tại

Tôi đang sử dụng ELMAH để ghi lại ngoại lệ và nhận ngoại lệ này khi URL có bộ điều khiển không hợp lệ hoặc bộ điều khiển thích hợp và hành động không hợp lệ.

System.Web.HttpException: The controller for path '/BadController' was not found or does not implement IController. 
    at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) 
    at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 
    at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) 
    at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 
    at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Tôi muốn dừng ngoại lệ này khỏi bị ném. Tôi đang sử dụng các lỗi tùy chỉnh và chúng hoạt động tốt, vì ứng dụng sẽ gửi tới trang lỗi 404 tùy chỉnh của tôi. Tuy nhiên, ngoại lệ vẫn được ghi lại.

Tôi có thuộc tính [HandleError] trang trí tất cả các bộ điều khiển. Điều này có thể không? Và nếu vậy tôi sẽ đánh giá cao bất kỳ sự giúp đỡ nào.

Tôi đã thử, đặt final route that redirects, nhưng nó phù hợp với tuyến đường trước đó vì lý do gì. Tôi đã cố gắng sử dụng một số httpModule và thanh toán bù trừ trong sự kiện Application_Error của tệp Global.asax. Không có gì dừng lại là ngoại lệ.

Cảm ơn bạn lần nữa vì đã được trợ giúp!

+0

Có gì xấu về việc đăng nhập? Thường xuyên 404 được mặc định cũng đăng nhập vào Apache, ví dụ. –

+0

Nó không phải là đăng nhập rất nhiều, nhưng ngoại lệ mà tôi đang cố gắng để bí. Tôi muốn có một lỗi 404, vì nó phải là một 404. Tuy nhiên tình hình lý tưởng của tôi để có các.NET customErrors ném một 404 và không có ngoại lệ được ném. –

Trả lời

1

Có lẽ không chuyển tiếp vấn đề của tôi đúng cách, sau khi tấn đào xung quanh ngoại lệ này là vụ phải ném. Câu trả lời là loại trừ những ngoại lệ đó khỏi ELMAH, theo số article này.

Theo mặc định, ELMAH ghi lại chi tiết mọi ngoại lệ chưa được xử lý, bao gồm 404 và các lỗi HTTP khác. Bạn có thể hướng dẫn ELMAH bỏ qua các lỗi này hoặc các loại lỗi khác bằng cách sử dụng lỗi lọc.

+0

[Bài viết này] (http: //www.diaryofaninja.com/blog/2011/09/20/add-filters-to-your-elmah-installation) đã chính xác những gì tôi đang tìm kiếm, đăng nhập lỗi nhưng không gửi email cho tôi, hoàn hảo! –

2

Kết nối nhà máy điều khiển tùy chỉnh có thể thực thi các tính năng mong muốn của bạn khi không tìm thấy bộ điều khiển được yêu cầu. Nó chỉ là một vài dòng mã, không có gì quá đau đớn.

Bạn có thể cuộn nhà máy điều khiển của riêng bạn hoặc sử dụng một trong nhiều thư viện làm điểm xuất phát. Bạn sẽ có một lớp thực hiện IControllerFactory và bên trong hàm CreateController() sẽ là logic tùy chỉnh của bạn.

0

Tôi sử dụng DSO's ITCloud Contrib. Không có thông số chung nào trong số đó là {controller}/{action}. Rõ ràng UrlRoute thuộc tính cho mỗi phương thức hành động. Tôi thích nhìn thấy các ràng buộc tham số trực tiếp trên phương thức.

4

Tạo RouteConstraint, kiểm tra xem bộ điều khiển có tồn tại không (thực tế là quét tất cả các bộ điều khiển có thể khi khởi động và lưu trữ bộ nhớ, bạn biết ý tôi là gì) và thêm nó vào tuyến đường tiêu chuẩn của bạn.

vì vậy, khi bạn có yêu cầu đối với bộ điều khiển kém, nó không được chấp nhận bởi Tuyến đường thông thường. nhưng sau đó được chấp nhận bởi catchall -> 404 route ...

Các vấn đề liên quan