我最近将Microsoft Unity添加到我的MVC3项目中,现在我收到了这个错误:
无法找到路径'/favicon.ico'的控制器,或者它没有实现IController。
我真的没有favicon.ico,所以我不知道它来自哪里。而最奇怪的是视图实际上正在呈现,然后这个错误被抛出......我不确定我的控制器工厂类是否有问题,因为我从一些教程得到了代码(我不是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;
}
}
有什么建议吗?
提前致谢!
答案 0 :(得分:29)
这与您的控制器工厂无关,但您可以轻松解决这个问题。
如果您使用的是Webkit浏览器(特别是Chrome,我认为是Safari),对任何网站的请求将自动伴随对'/favicon.ico'的请求。浏览器正在尝试查找伴随您网站的快捷方式图标,并且(无论出于何种原因)快捷方式图标的默认路径已标准化为“/favicon.ico”。
为了避免您遇到的错误,只需在MVC Web应用程序的路由表中定义一个IgnoreRoute():
RouteTable.Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" });
这将确保MVC不会处理对'/favicon.ico'(或'/favicon.gif')的任何请求。
答案 1 :(得分:0)
我也看到了这一点:
catch (Exception ex)
{
/*throw new InvalidOperationException(String.Format(
"Error resolving controller {0}",
controllerType.Name), ex);*/
base.GetControllerInstance(requestContext,controllerType);
}