我有一个网站,我需要在其中添加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,清除历史记录,然后再试一次即可。

10-07 16:36
查看更多