Question

Je souhaite configurer une page d'administration (ASP.NET/C#) pouvant ajouter des en-têtes d'hôtes IIS au site Web sur lequel la page d'administration est hébergée. Est-ce possible?

Je ne veux pas ajouter d'en-tête http - je veux imiter l'action d'aller dans IIS manuellement, en affichant les propriétés du site Web, en cliquant sur l'onglet avancé du site Web, puis dans l'écran d'identification avancée du site Web et un nouveau " ; identité " avec la valeur d'en-tête d'hôte, l'adresse IP et le port TCP.

Était-ce utile?

La solution

Voici un forum sur Ajout d'une autre identité à un site par programme RSS

De plus, voici un article sur la façon de Ajouter un en-tête d’hôte par code dans IIS :

  

L'exemple suivant ajoute un en-tête d'hôte à un site Web dans IIS. Cela implique de changer la propriété ServerBindings. Aucune méthode Ajout ne peut être utilisée pour ajouter une nouvelle liaison de serveur à cette propriété. Par conséquent, vous devez lire l'intégralité de la propriété, puis l'ajouter à nouveau, avec les nouvelles données. C'est ce qui est fait dans le code ci-dessous. Le type de données de la propriété ServerBindings est MULTISZ et le format de chaîne est IP: Port: nom d'hôte.

     

Notez que cet exemple de code ne vérifie pas les erreurs. Il est important que chaque entrée ServerBindings soit unique et que vous, en tant que programmeur, soyez responsable de la vérifier (ce qui signifie que vous devez parcourir toutes les entrées et vérifier si ce qui va être ajouté est unique).

using System.DirectoryServices;
using System;

public class IISAdmin
{
    /// <summary>
    /// Adds a host header value to a specified website. WARNING: NO ERROR CHECKING IS PERFORMED IN THIS EXAMPLE. 
    /// YOU ARE RESPONSIBLE FOR THAT EVERY ENTRY IS UNIQUE
    /// </summary>
    /// <param name="hostHeader">The host header. Must be in the form IP:Port:Hostname </param>
    /// <param name="websiteID">The ID of the website the host header should be added to </param>
    public static void AddHostHeader(string hostHeader, string websiteID)
    {

        DirectoryEntry site = new DirectoryEntry("IIS://localhost/w3svc/" + websiteID );
        try
        {                        
            //Get everything currently in the serverbindings propery. 
            PropertyValueCollection serverBindings = site.Properties["ServerBindings"];

            //Add the new binding
            serverBindings.Add(hostHeader);

            //Create an object array and copy the content to this array
            Object [] newList = new Object[serverBindings.Count];
            serverBindings.CopyTo(newList, 0);

            //Write to metabase
            site.Properties["ServerBindings"].Value = newList;            

            //Commit the changes
            site.CommitChanges();

        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

    }
}

public class TestApp
{
    public static void Main(string[] args)
    {
        IISAdmin.AddHostHeader(":80:test.com", "1");
    }
}

Mais je ne suis pas sûr de savoir comment parcourir les valeurs d'en-tête pour effectuer la vérification d'erreur mentionnée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top