Как стать автором
Обновить

Комментарии 28

В шаге 3 приведены примеры для MVC 1.0 и 2.0. Для 3.0 есть отличие?
Для MVC 3.0 можно использовать код из примера для MVC 2.0.
господи. убейте ASP.NET. туева хуча кода из-за страницы 404 ошибки…
ты все никак не успокоишься? )))
А в чем ASP.NET провинилась? Речь в статье о ASP.NET MVC.
в том, что это мусорная технология
НЛО прилетело и опубликовало эту надпись здесь
Совет тем, кто еще не программит на .NET'е: подумайте, надо ли вам это?

За свою многолетнюю практику программинга (а я MS certified .NET developer с 2005-ого года) таких ситуаций возникало вагон и маленькая тележка. Это уже стало классикой жанра, потрахаться с какой-нибудь пустяковой проблемой целый день.
Мне кажется автор сам загнал себя в надуманные рамки и потратил день пытаясь решить получившуюся задачу. Такие проблемы могут возникнуть везде, вот не далее как сегодня не смогли получить HttpStatusCode Description на objective C, можно было бы копать дальше, но решили просто добавить новый хедер в ответ.
Это не так, сам недавно с этим столкнулся. Подтверждаю сложность этой задачи.
Более простого решения, к сожалению, не нашел. Если оно существует, пусть даже постановку задачи придется немного изменить, будет очень интересно его узнать.
На самом деле в своем проекте на MVC 404 ошибку я обрабатываю в 2-х местах: так же с помощью "{*url}" и в переопределенном методе GetControllerType DefaultControllerFactory, но мне так удобно потому что там же мне нужно проверять авторизацию.
Да блин, я всегда знал что у MS какая то противоестественная любовь к сетевым технологиям (одно только нежелание обновлять браузер 5 лет — с 6 на 7 версию чего стоит). А тут такая тривиальная для Web задача требует массы телодвижений.
НЛО прилетело и опубликовало эту надпись здесь
Каждый раз, когда я сталкиваюсь с ошибкой 404 на сайтах, сделанных на ASP, хочется убить авторов этой недотехнологии. Например, ввел название страницы с ошибкой. Браузер заредиректил тебя на root/404.html. Теперь, вместо того, чтобы исправить одну букву в url, надо его набрать заново. Ну и прочие неудобства из-за этого редиректа.
Дело не в языке и не в технологии, а в кривых руках. Надо грамотно организовывать показ ошибки (без редиректа в адресной строке), и это можно сделать как на обычном asp.net, так и на asp.net mvc.
Абсолютно согласен. Заболевание «кривые руки» широко распространено и кросс-технологично.
Почему-то статья стала компроматом на Microsoft и на технологии и продукты разработанные этой компанией. ASP.NET и ASP.NET MVC хорошие и качественные технологии, если использовать их с головой и руками, растущими откуда надо.

Хочу обратить внимание на то, что автор не просто хочет выдать страницу с 404 ошибкой, но и залогировать, обработать индивидуально каждый тип 404 ошибки и события (не найден товар и т.д.), которое привело к ней, именно поэтому требуется немного кода. Особо не вдавался в детали реализации, но уверен, что реализация на других платформах также потребует написания кода и вероятно далеко не меньших размеров.

Также автор использует IIS 6 версии, отсюда часть проблем. А теперь давайте вспомним в каком году он появился на свет? Да, именно, в 2003 году, т.е. 8 лет назад, а ASP.NET MVC 3.0 в этом году. Естественно, будут какие-нибудь проблемы.
«Хочу обратить внимание на то, что автор не просто хочет выдать страницу с 404 ошибкой, но и залогировать, обработать индивидуально каждый тип 404 ошибки и события (не найден товар и т.д.), которое привело к ней, именно поэтому требуется немного кода. Особо не вдавался в детали реализации, но уверен, что реализация на других платформах также потребует написания кода и вероятно далеко не меньших размеров.»
не сказать-не сказать…
ru.w3support.net/index.php?db=so&id=1024199
В приведенном примере дано хорошее решение для nginx. Если я ничего не упустил, подобным образом можно сделать и в ASP.NET MVC, если использовать IIS 7 и выше (как было описано в разделе про настройку через Web.config).
Это также просто делается на IIS 7 и 7.5. И на 6 тоже должно работать, если есть физически указанный файл.
А такое (то, что описано в примере) было реализовано в nginx в 2003 году? Хотя какое там, согласно википедии первый публичный релиз вышел в 2004.
в обычном апаче в 2003 было:)
я не говорю что мелкософтовые серверные решения плохо, asp.net для некоторых задач подходит куда лучше php, но какие-то моменты в их продуктах очень не логично продуманы или совсем не продуманы:)
Ну, хорошо что было. В 6 тоже было, единственное, что указать надо физический имеющийся файл, например тот же .aspx и всё обрабатывается. Естественно, в 2003 году не думали о том, что в 2011 будет ASP.NET MVC с которым может быть недопонимание.

Я нелогичных моментов пока не встречал, наверное везёт :)
Нет никаких проблем в MVC3. Есть вебконфиг, настроенный как в статье и есть:
throw new HttpException(404,"Оло-ло, страница не найдена!");
или
return new HttpNotFoundResult();
Может с IIS6 и ест проблемы, но с II7 вообще проблем нет с обработкой ошибок, и кастомными страницами.
А почему в InvokeHttp404 нельзя сделать так:

return RedirectToAction("Http404", "Error", new {url = httpContext.Request.Url.OriginalString});
Насколько я понимаю, в приведенном примере за счет возврата EmptyResult мы не возвращаем код 302, а потом 404 из вызванного метода Http404. Вместо этого сразу вызываем Http404, возвращая код 404.
Этот метод на практике еще не применял, только привел перевод решения. Поэтому это лишь мое предположение, нужно попробовать оба варианта реализации InvokeHttp404.
когда заходил под кат, ждал что вылезет ошибка 404
> Install-Package NotFoundMvc
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации