2016-02-23 1 views
2

maintenant j'ai une application web qui sera publié sur plusieurs domaines et je veux soutenir différents favicon basé sur le domaineMVC Au service Favicons basé sur le domaine

ce que je l'avais fait est:

** Ajout d'un gestionnaire dans web.config appelé « favicon », pour toute demande d'un fichier appelé « favicon.ico »

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

** classe ensuite ajouté qui prend en charge l'interface 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"; 
     } 
    } 

Le problème est .. ça ne fonctionne pas bien .. Qu'est-ce qui me manque ?? Merci à l'avance

+0

Ne pourriez-vous pas réaliser cela plus facilement avec JavaScript? Ayez juste un favicon pour chaque domaine dans un dossier spécifique de domaine, puis construisez l'URL pour le favicon sur le client basé sur window.location. Puis définir cela dans l'étiquette de tête? – LDJ

Répondre

2

Une autre façon pourrait être de garder tous les fichiers icône nommés avec des noms de domaine comme -

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

Faire un BaseController et définir une propriété ViewBag dans son OnActionExecuting (la remplacer) avec le nom d'hôte -

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

Et dans votre mise en page de jeu principal lien favicon comme -

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