Работа с необработанным HttpException

У меня есть действие контроллера, как это:

public ActionResult Index(string url)
{
     var pageTitle = url.Split('/')[0];
     var page = Services.PageService.GetPage(pageTitle);

     if (page == null)
     {
         throw new HttpException((Int32) HttpStatusCode.NotFound, "NotFound");
     }

      return View(page);
 }

Каждый раз, когда я отлаживаю свой сайт, когда возникает исключение HttpException, я получаю приглашение от Visual Studio, уведомляющее меня о том, что исключение не было обработано кодом пользователя.

Я думаю, я просто хочу, чтобы кто-то разъяснил, что то, что я делаю, правильно, и что это уведомление может быть отклонено без беспокойства. Событие все еще всплывает до метода Application_Error в моем файле Global.asax, где я на самом деле обрабатываю HttpException, поэтому, насколько я могу судить, единственная проблема заключается в неудобстве VS, сообщающего мне каждый раз, когда выдается это исключение.

2 ответа

Решение

Я думаю, я просто хочу, чтобы кто-то разъяснил, что то, что я делаю, правильно, и что это уведомление может быть отклонено без беспокойства.

Да, то, что вы видите, называется исключением первого шанса. Отладчик VS уведомляет вас обо всех исключениях, возникающих в вашем коде. Если у вас есть правильный обработчик для этого исключения, у вас все будет хорошо.

Я предполагаю, что вы хотите вернуть http-код (в данном случае 404) пользователю / потребителю вашей страницы. Так что лучше сделать это:

public ActionResult Index(string url)
{
     var pageTitle = url.Split('/')[0];
     var page = Services.PageService.GetPage(pageTitle);

     if (page == null)
     {
        return new HttpNotFoundResult();
     }
      return View(page);
 }

HttpNotFoundResult - это новый ActionResult в asp.net-mvc3, также есть защищенный метод HttpNotFound() как часть класса контроллера, который делает то же самое. В обоих случаях вы также можете указать строку сообщения.

Возвращение ActionResult также более изящно, я думаю, с точки зрения юнит-тестирования.

Другие вопросы по тегам