2010-11-10 2 views
1

Я использую проверку запроса на asp.net mvc 2 на .NET 4 и всякий раз, когда я отправляю htmlcode в действие моего контроллера. это хорошо. Но я вижу теперь свой желтый экран смерти. Вместо этого я хочу перенаправить пользователя на мою страницу с ошибкой для этого. Что необходимо изменить в моем web.config для перенаправленияпотенциально опасный запрос перенаправить на страницу с ошибкой

~/Home/InvalidInput 

, например.

ответ

2

Вы хотите добавить эту информацию в элемент customErrors в файле web.config. Этот элемент определяется под тегом system.web.

<customErrors mode="RemoteOnly" defaultRedirect="/Home/InvalidInput " /> 

Кроме того, вам нужно будет определить маршрут для обработки этого перенаправления, поскольку это не более чем URL-адрес. Просто укажите маршрут и действие в своем HomeController, которое вернет представление InvalidInput при ударе этого маршрута.

+0

да, это работает. благодаря – jwdehaan

0

Настройка пользовательского базового контроллера, на который наследуется HomeController (и все, что у вас есть). После этого вы можете обработки исключений установки в базовом контроллере:

protected override void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      base.OnException(filterContext); 
      return; 
     } 

     filterContext.ExceptionHandled = true; 

     if (filterContext.Exception is HttpException) 
     { 
      var statusCode = ((HttpException) filterContext.Exception).GetHttpCode(); 
      Response.StatusCode = statusCode; 

      if (statusCode == (int) HttpStatusCode.NotFound) 
      { 
       filterContext.Result = View(ErrorController.Actions.NotFound); 
      } 
      else 
      { 
       filterContext.Result = View(ErrorController.Actions.InternalServerError); 
      } 
     } 
     else 
     { 
      Response.StatusCode = (int) HttpStatusCode.InternalServerError; 
      filterContext.Result = View(ErrorController.Actions.InternalServerError); 
     } 

     base.OnException(filterContext); 
    } 

Конечно, вы будете нужны ваши собственные взгляды ErrorController и ошибок, а также.

Преимущество в том, что: a) у вас есть больший контроль над обработкой исключений, b) вы можете установить соответствующий код состояния HTTP, и c) вы можете выполнить модульный тест обработчика ошибок.

Свойство defaultRedirect customErrors будет работать так же, как и более базовый подход, однако вы не можете тестировать поведение, и пользователи затем подвергаются вашим ошибкам, а не остаются на текущем URI.

Смежные вопросы