如何在为favicon添加忽略路由后修复“文件不存在”错误

时间:2012-11-12 08:18:53

标签: asp.net asp.net-mvc asp.net-mvc-3 autofac mvcextensions

我正在使用ASP.NET MVC 3。我还在使用AutofacMVC Extensions。我最初得到的错误是:

The controller for path '/favicon.ico' was not found or does not implement IController.

我读了几篇帖子,他们都建议我加入以下内容:

Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

然后我开始收到以下错误:

File does not exist.
ExceptionType:HttpException Stacktrace:
     at System.Web.StaticFileHandler.GetFileInfo(String virtualPathWithPathInfo, String physicalPath, HttpResponse response)
     at System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext context, String overrideVirtualPath)
     at System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state)
     at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
     at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

错误并没有告诉我多少,因为我不知道它试图打开什么文件?我该如何解决这个问题?我没有使用图标,我不想要一个。我正在使用Internet Explorer 8

3 个答案:

答案 0 :(得分:2)

大多数现代浏览器都盲目地提出了对favicon.ico的请求,如果没有favicon(这是正确的行为),他们期望 404(找不到文件)。您可以在下面找到关于Link type "icon"的HTML5工作草案的引用 :

  

在没有带有icon关键字的链接的情况下,获取的文档   通过HTTP或HTTPS,用户代理可能会尝试获取和使用   带有通过解析URL获得的绝对URL的图标   /favicon.ico反对文档的地址,就像页面一样   使用icon关键字声明该图标。

您看到异常的原因是配置为使用托管/集成管道模式的Web开发服务器或IIS通过 Global.asax 放置所有请求(包括错误) )。

您可以尝试通过创建以下关于favicon的虚拟链接来阻止浏览器发出请求:

<html>
    <head>
        <link rel="shortcut icon" href="#" />
        ...
    </head>
...
</html>

您还可以为自己创建一个空文件,或者通过选中<{em> 404 的HttpException.GetHttpCode() /favicon.ico的((System.Web.HttpApplication)Sender).Context.Request.Url来过滤错误EM>

答案 1 :(得分:0)

如果您不想在您的网站中使用favicon,但仍希望摆脱此错误,则可以创建一个大小为0字节的文件,并将其命名为favicon.ico

答案 2 :(得分:0)

尝试的替代规则简单明了:

// add ignore route for favicon.ico
routes.IgnoreRoute("favicon.ico");