Проблема с пользовательским контроллером factory
Недавно я добавил Microsoft Unity в свой проект MVC3, и теперь я получаю эту ошибку:
Контроллер для пути '/favicon.ico' не найден или не реализует IController.
У меня нет favicon.ico, поэтому я понятия не имею, откуда это. И самое странное, что представление действительно отображается, и ТОГДА эта ошибка возникает... Я не уверен, что это что-то не так с моим контроллером класса factory, потому что я получил код из некоторого учебника (я не к IoC - это первый раз, когда я это делаю). Здесь код:
открытый класс UnityControllerFactory: DefaultControllerFactory
{ Контейнер IUnityContainer;
public UnityControllerFactory(IUnityContainer _container)
{
container = _container;
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
IController controller;
if(controllerType == null)
throw new HttpException(404, string.Format("The controller for path '{0}' could not be found or it does not implement IController.",
requestContext.HttpContext.Request.Path));
if(!typeof(IController).IsAssignableFrom(controllerType))
throw new ArgumentException(string.Format("Type requested is not a controller: {0}",
controllerType.Name),
"controllerType");
try
{
controller = container.Resolve(controllerType) as IController;
}
catch (Exception ex)
{
throw new InvalidOperationException(String.Format(
"Error resolving controller {0}",
controllerType.Name), ex);
}
return controller;
}
}
Любые предложения?
Спасибо заранее!
Ответы
Ответ 1
Это не имеет никакого отношения к вашему контроллеру factory, но это то, к чему вы можете легко обратиться.
Если вы используете браузер Webkit (особенно Chrome, Safari тоже, я думаю), запрос на любой сайт автоматически будет сопровождаться запросом "/favicon.ico". Браузер пытается найти значок ярлыка для сопровождения вашего сайта и (по какой-либо причине) путь по умолчанию для ярлыков ярлыков стандартизован как "/favicon.ico".
Чтобы избежать ошибки, которую вы получаете, просто определите IgnoreRoute() в таблице маршрутизации вашего веб-приложения MVC:
RouteTable.Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" });
Это гарантирует, что любой запрос '/favicon.ico' (или '/favicon.gif') не будет обрабатываться MVC.
Ответ 2
Я тоже это сделал:
catch (Exception ex)
{
/*throw new InvalidOperationException(String.Format(
"Error resolving controller {0}",
controllerType.Name), ex);*/
base.GetControllerInstance(requestContext,controllerType);
}