自定义控制器工厂的问题

Kas*_*sem 10 asp.net-mvc asp.net-mvc-3

我最近将Microsoft Unity添加到我的MVC3项目中,现在我收到此错误:

无法找到路径'/favicon.ico'的控制器,或者它没有实现IController.

我真的没有favicon.ico,所以我不知道它来自哪里.而最奇怪的是视图实际上正在呈现,然后这个错误被抛出......我不确定我的控制器工厂类是否有问题,因为我从一些教程得到了代码(我不是IoC - 这是我第一次这样做).这是代码:

public class UnityControllerFactory:DefaultControllerFactory {IUnityContainer container;

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;
}
Run Code Online (Sandbox Code Playgroud)

}

有什么建议?

提前致谢!

Nat*_*lor 29

这与您的控制器工厂没有任何关系,但它是您可以轻松解决的问题.

如果您使用的是Webkit浏览器(特别是Chrome,我认为是Safari),对任何网站的请求将自动伴随对'/favicon.ico'的请求.浏览器正试图找到一个快捷方式图标陪伴您的网站,(无论何种原因)的默认的快捷方式图标的路径已经被标准化为"/favicon.ico".

要避免出现错误,只需在MVC Web应用程序的路由表中定义一个IgnoreRoute():

RouteTable.Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.([iI][cC][oO]|[gG][iI][fF])(/.*)?" });
Run Code Online (Sandbox Code Playgroud)

这将确保MVC不会处理对'/favicon.ico'(或'/favicon.gif')的任何请求.