MVC服务基于域的Favicons

时间:2016-02-23 08:42:44

标签: asp.net-mvc httphandler favicon

现在我有一个将在多个域上发布的Web应用程序,我想支持基于域的不同favicon

我所做的是:

**在web.config中添加了一个名为“favicon”的处理程序,用于任何名为“favicon.ico”的文件请求

<system.webServer>
<handlers>
<add name="favicon" verb="*" path="favicon.ico" type="namespace.FaviconHandler, MyApplication" />
// other handlers
</handlers>
</system.webServer>

**然后添加了支持IHttpHandler接口的类

public class FaviconHandler : IHttpHandler
    {
        public void ProcessRequest(System.Web.HttpContext ctx)
        {
            string path = getFavIconPath(ctx.Request.Url.Host.ToLower());
            string contentType = "image/x-icon";
            path = ctx.Server.MapPath(path);

            if (!File.Exists(path))
            {
                ctx.Response.StatusCode = 404;
                ctx.Response.StatusDescription = "File not found";
            }
            else
            {
                ctx.Response.StatusCode = 200;
                ctx.Response.ContentType = contentType;
                ctx.Response.WriteFile(path);
            }
        }
        private string getFavIconPath(string domain)
        {

            if (!string.IsNullOrEmpty(domain))
            {

                if (domain.Contains("abc.com")))
                    return "favicon.ico";
                else
                    return "favicon2.ico";
            }
            return "favicon.ico";
        }
    }

问题是......它运作不正常.. 我想念的是什么? 提前致谢

1 个答案:

答案 0 :(得分:3)

另一种方法是保留所有以域名命名的图标文件,如 -

images
    - abc.com.ico
    - def.com.ico

创建一个basecontroller,并在其OnActionExecuting中设置一个ViewBag属性(覆盖它),并使用主机名 -

public override void OnActionExecuting(ActionExecutingContext ctx)
{
    base.OnActionExecuting(ctx);
    string host = HttpContext.Request.Host.Value;
    ViewBag.Host = host;
}

在主布局中设置favicon链接,如 -

<link rel="icon" href="~/images/@(ViewBag.Host).ico"/>