现在我有一个将在多个域上发布的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";
}
}
问题是......它运作不正常.. 我想念的是什么? 提前致谢
答案 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"/>