- имеют конструктор, который выдает исключение, и имеют обработчики в вызывающей функции для его обработки.
Да. Разработать по контракту и оставить предварительную проверку включенной, а в случае неудачи вывести исключение. Нет больше недействительных раз.
- имеют флаг в классе и устанавливают его в true, только если значения приемлемы для конструктора, и программа проверяет флаг сразу после построения.
Может быть. Приемлемо в сложных случаях, но опять же, бросить, если проверка не удалась.
- есть отдельная (возможно, статическая) функция для вызова, чтобы проверить входные параметры непосредственно перед вызовом конструктора.
Может быть. Речь идет о том, чтобы сказать, верны ли входные данные, или нет, и может быть полезно, если сказать, что это нетривиально, но см. Выше для , как реагировать в случае неверных данных.
- переработать класс так, чтобы он мог быть построен из любых входных параметров.
Нет. Вы в основном отложите проблему.
Это не имеет ничего общего с MVC. Я использую веб-формы с настраиваемой службой журналов, и я наткнулся на этот пост, задаваясь вопросом, почему у меня в журналах постоянно возникают ошибки «Файл не существует». Это локально на моей машине разработки, у меня нет файлов favicon.ico в моих проектах, и я пробовал IE, Firefox и Google, пытаясь определить, какой браузер виноват.
Каждый запрос от Google Chrome к моим приложениям делает запрос на favicon.ico . Мне пришлось запустить локальный журнал браузера, чтобы определить, что на самом деле виноват браузер Google. Я бы связался с Google, если это вас беспокоит. Я просто хотел убедиться, что мой Chrome не заразил какой-то новый троян.
У вас есть значок? Если нет, возможно, поэтому Chrome каждый раз пытается найти его для вашего веб-сайта. В Google уже есть кешированный значок.
Некоторое время назад я столкнулся с этой проблемой и решил ее, игнорируя конкретный маршрут, добавив
routes.IgnoreRoute("{*favicon}", new { favicon = ".*/favicon\\.ico" });
в метод RegisterRoutes в Global.asax.
вы могли бы сделать так, чтобы MVC игнорировал любой запрос для * .ico, чтобы вы не получали никаких исключений во время отладки.
Должно быть что-то вроде этого:
routes.MapRoute("ignore-favicon", "{*path}", null, new {path = ".*/favicon\\.ico"});
Это Шаблон URL соответствует всему, но затем мы ограничиваем его совпадением только с тем, что заканчивается на favicon.ico. (Я не тестировал это)
If you check your project setting it says default icon somewhere. Remove that?
Chrome browser could work with Google site in another way than with any other site, so, at first, I would recommend to check if it looks for favicon.ico every time somewhere else, for example, on StackOverflow.
I would also check if Firefox does the same with your site. I think favicon.ico should be requested only one time per browser run even if it isn't present on site. This could be bug in Chrome version you use.
You should set the Expires header to tell the browser how long it should use its local copy.
Этот вопрос / ответ SO объясняет, как передать значок Favicon в браузер с помощью маршрутов.
Важно поместить ссылку ICON на главную страницу, иначе некоторые браузеры попытаются найти favicon.ico для всех каталогов, а не только глобально, когда это будет сделано.
<link rel="SHORTCUT ICON" href="<%= Url.Content("~/content/images/rr-favicon.ico") %>"/>
Судя по моим журналам (и, конечно, IE6), похоже, виновата панель инструментов Google. Они оба будут делать запросы для каталогов, отличных от корневого
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; GoogleToolbar 6.2.1910.1554; Windows 6.0; MSIE 8.0.6001.18828)
Вы можете добавить что-то подобное в свой файл web.config
, чтобы убедиться, что favicon.ico
кэшируется на клиенте, а не запрашивается каждый раз.
<location path="favicon.ico">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="public, max-age=31536000" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
Вы можете / должны сделать то же самое для любых файлов изображений / .js и css