2015-07-14 5 views
0

Я хочу использовать Application_Error() в global.asax для регистрации неверных URL-адресов на веб-сайте и перенаправления на страницу пользовательской ошибки. Проблема в том, почему веб-сайт не проходит через ошибку приложения, когда контроллер не существует.Не пропускать через ошибку приложения, когда контроллер не существует

Я тестировал следующий URL, и все прошло через ошибки приложения:

Это один не проходит через ошибки приложения и возвращает 404:

Применение Код ошибки:

protected void Application_Error(object sender, EventArgs e) 
{ 
    var requestTime = DateTime.Now; 
    Exception ex = Server.GetLastError().GetBaseException(); 
    //log Request.Url.ToString() 
} 

RouteConfig.cs код:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
    name: "Account", 
    url: "Account/{action}/{id}", 
    defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "Home", 
    url: "Home/{action}/{test}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

routes.MapRoute(
    name: "HomeBlank", 
    url: "", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+0

Является ли HandleErrorAttribute зарегистрированным в качестве глобального фильтра? Считаете ли вы использование ELMAH (который регистрирует все исключения по умолчанию)? –

+0

Да, HandleErrorAttribute добавлен. Я проверю ELMAH. Спасибо. – Tonned

ответ

0

Пожалуйста, добавьте следующие строки в ваш RouteConfig.cs:

routes.MapRoute(
    name: "NotFound", 
    url: "{*url}", 
    defaults: new { controller = "Error", action = "NotFound", id = UrlParameter.Optional } 
); 

Некоторые URL не смогут быть проанализированы и добавлены выше, будут обрабатывать эти случаи. В вашем действии NotFound из ErrorController вы можете показать пользователю свою страницу пользовательской ошибки.

public class ErrorController : Controller 
{ 
    public ActionResult NotFound() 
    { 
     Response.StatusCode = 404; 
     return View(); 
    } 
} 
Смежные вопросы