2

我正在使用ASP.NET MVC 3. 我也在使用Autofacand MVC 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.

4

3 回答 3

2

大多数现代浏览器都盲目地发出对 favicon.ico 的请求,如果没有 favicon(这是正确的行为) ,他们会期待404(未找到文件)。您可以在下面找到 HTML5 工作草案中关于链接类型“icon”的引用 :

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

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

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

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

您还可以为自己创建一个 favicon 的空文件,或者通过检查HttpException.GetHttpCode()404/favicon.ico((System.Web.HttpApplication)Sender).Context.Request.Url过滤掉错误。

于 2012-11-12T09:12:18.917 回答
0

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

于 2012-11-12T09:17:31.103 回答
0

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

// add ignore route for favicon.ico
routes.IgnoreRoute("favicon.ico");
于 2013-01-18T15:46:15.750 回答