我有一个网站,我需要在其中添加Favicon.ico。该站点是使用带有路由的ASP.NET 3.5 Web窗体编写的。问题是Favicon链接始终返回页面未找到错误。这是因为“路由”不知道Favicon.ico的链接应该去哪里,因此它返回“未找到”页面。
我试图为该图标添加一个StopRoutingHandler,但它们似乎都不起作用。以下是我到目前为止尝试过的方法:
routes.Add(new Route("MasterPages/{favicon}.ico", new StopRoutingHandler()));
routes.Add(new Route("{favicon}.ico", new StopRoutingHandler()));
routes.Add(new Route("favicon.ico", new StopRoutingHandler()));
routes.Add(new Route("favicon.ico/{*pathInfo}", new StopRoutingHandler()));
有人知道我应该使用什么吗?我尝试过的favicon.ico链接如下所示:
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
它们在我的
<html><head>
标记内。另外,最后一点,我没有使用MVC,因为如果可以的话,我可以使用它:
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
不幸的是,尽管IgnoreRoute不是MVC应用程序,但它不适用于“路由Web表单”。
最佳答案
我用了它,它起作用了:
routes.Add(new Route("favicon.ico", new StaticFileRouteHandler("~/favicon.ico")));
public class StaticFileRouteHandler : IRouteHandler
{
public string VirtualPath { get; set; }
public StaticFileRouteHandler(string virtualPath)
{
VirtualPath = virtualPath;
}
public System.Web.IHttpHandler GetHttpHandler(RequestContext requestContext)
{
HttpContext.Current.RewritePath(VirtualPath);
return new DefaultHttpHandler();
}
}
显然这也可行:
routes.Add(new Route("favicon.ico", new StopRoutingHandler()));
我只需要关闭Firefox,清除历史记录,然后再试一次即可。