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。