Asp.net “如何修复”;“文件不存在”;为favicon添加忽略路由后出错

Asp.net “如何修复”;“文件不存在”;为favicon添加忽略路由后出错,asp.net,asp.net-mvc,asp.net-mvc-3,autofac,mvcextensions,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Autofac,Mvcextensions,我使用的是ASP.netmvc3。我还使用了Autofac和MVC扩展。我最初得到的错误是: The controller for path '/favicon.ico' was not found or does not implement IController. 我读了几篇帖子,他们都建议我写以下内容: Routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 然后我开始出现以下错误:

我使用的是
ASP.netmvc3
。我还使用了
Autofac
MVC扩展。我最初得到的错误是:

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)

错误没有告诉我太多,因为我不知道它试图打开什么文件?我将如何解决这个问题?我没有用favicon,我不想要。我使用的是
InternetExplorer8

大多数现代浏览器都在盲目地请求favicon.ico,如果没有favicon(这是正确的行为),他们会期望404(找不到文件)。下面你可以找到HTML5工作草案中关于 :

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

出现此异常的原因是,配置为使用托管/集成管道模式的web开发服务器或IIS将所有请求都放在Global.asax中(包括错误)

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

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

...
...

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

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

另一种尝试规则简单明了:

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

该错误表明favicon不存在于搜索它的位置(忽略路由当然有效,因为StaticFileHandler已经拾取了请求)。尝试使用
Url.Content
生成favicon的正确路径,并检查错误是否仍然存在。可能还有其他原因,所以我还没有将此作为答案发布。我没有使用favicon。浏览器会自动检查网站是否有favicon,因此无论您的应用程序是否有favicon,您(几乎)总是会收到一个请求。MVC引擎当然会尝试处理这个请求。所以你在与谷歌Chrome对favicon的盲目请求抗争——很抱歉我没有正确理解这个问题。我没有favicon,我也不想要,但它正在寻找一个。我用的是IE8,不是Chrome。