Работа с необработанным HttpException - PullRequest
0 голосов
/ 13 февраля 2012

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

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 ]

1 голос
/ 13 февраля 2012

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

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

0 голосов
/ 13 февраля 2012

Я предполагаю, что вы хотите вернуть 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 также более изящно, я думаю, с точки зрения юнит-тестирования .

...