Я думаю, что MVC, ASP и ваша любимая среда ведения журналов / обработки исключений могут справиться с вашими задачами. ELMAH и Enterprise Library предоставляют простую в использовании обработку исключений и ведение журналов, так что выбирайте свои любимые ... Я не буду вдаваться в плюсы и минусы каждого из них.
ПРИМЕЧАНИЕ: вы не можете отобразить дружественную страницу с ошибкой И вернуть HTTP 404 или 500, как подсказывает ваш вопрос. Когда вы возвращаете дружественную страницу ошибок, HTTP-код, возвращаемый вашему браузеру, будет 302. Это перенаправление на дружественную страницу ошибок.
Дружественные страницы ошибок
Похоже, вы можете достичь своих целей с помощью хороших старомодных настроек web.config, которые были частью ASP.net в течение некоторого времени. Вы упомянули показ отладочной информации в dev и показ дружественных страниц в производстве. Для этого вы можете использовать пользовательский раздел ошибок web.config (установите CustomErrors = "Off", чтобы показать отладочную информацию). Я собираюсь предположить, что вы знакомы с атрибутом CustomErrors, если не читаете это:
http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx
Если вам нужна большая детализация контроля над отображаемыми представлениями ошибок, используйте MVC's HandleError Attribute. Таким образом, вы можете выбрать различные виды ошибок для каждого действия / контроллера.
http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx
Регистрация исключений
Похоже, вы хотите одинаково реагировать на все ваши исключения («Регистрируйте ошибки и отправляйте их администратору по электронной почте»). В этом случае самый простой вариант - добавить код в
Application_Error (отправитель объекта, EventArgs e)
в вашем global.asax. Здесь вы можете перейти к выбранной вами системе ведения журналов.
Если вы хотите больше контроля над регистрацией / обработкой исключений, вы можете создать подкласс HandleErrorAttribute и переопределить
OnException(System.Web.Mvc.ExceptionContext filterContext)
это еще одно место, где вы можете перейти к выбранной вами системе ведения журналов.
https://stackoverflow.com/questions/183316/asp-net-mvc-handleerror
Это дает вам больше контроля, чем методика Application_Error, упомянутая выше.
В общем, MVC дает вам большую степень детализации контроля над ошибками. Если вам не нужен этот элемент управления, вы можете обратиться к ASP.net способам выполнения таких задач, как определение страниц ошибок в вашем файле web.config.