Как зарегистрировать 404 ошибки из глобальных фильтров .net mvc3, используя HandleErrorAttribute? - PullRequest
1 голос
/ 20 июня 2011

Я пытаюсь записать 404 ошибки из моего производного класса от HandleErrorAttribute .

Вот мой класс:

public class LogExceptionAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext exceptionContext)
    {
        Log.LogException(exceptionContext.Exception, exceptionContext.Exception.Message);
        base.OnException(exceptionContext);
    }
}

Я получаю все исключения в приложении, но я не получаю 404 ошибки. Я хочу получить всевозможные ошибки, исключения.

Ответы [ 3 ]

5 голосов
/ 20 июня 2011

Вам понадобится универсальный маршрут, который регистрируется последним, а затем отвечает 404 после того, как контроллер зарегистрировал ошибку:

 routes.MapRoute(
                                "NotFound", 
                                "{*url}", 
                               new {controller = "NotFound", action = "index"}
                               )


public class NotFoundController: Controller 
{
    public ActionResult Index(string url)
    {
            Log.Warn(this, string.Format("404 Request Not Found: {0}", url));
            Response.StatusCode = 404;
            var model = new NotFoundViewModel
                            {
                                Title = "Sorry but the page you are looking for does not exist",
                                Message = new HtmlString("Please <a href='/'>click here</a> to return to the home page")
                            };

            return View("404", model);
     }

}
2 голосов
/ 23 июня 2011

Вы все еще можете перехватить все ошибки в Application_Error.Вы также можете обработать ошибку 404, в частности, изменив раздел customErrors в файле Web.config.

0 голосов
/ 20 июня 2011

В этом другом посте есть некоторая информация, которая может оказаться полезной, если вы хотите понять, что происходит внутри:

Обработка ошибок в ASP.NET MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...