Pergunta

Gostaria de configurar uma página de administração (ASP.NET/C#) que pode adicionar cabeçalhos de host do IIS para o site que a página de administração está hospedado em. Isso é possível?

Eu não quero adicionar um cabeçalho HTTP - Eu quero imitar a ação de entrar em IIS manualmente, trazendo à tona as propriedades do site, clicar em Avançado na guia site, e na tela de identificação website avançado e um novo " identidade" com o valor de cabeçalho de anfitrião, endereço IP e porta TCP.

Foi útil?

Solução

Aqui está um fórum sobre Adicionando outra identidade para um site programaticamente RSS

Além disso, aqui está um artigo sobre como Anexar um cabeçalho de host por código no IIS :

O exemplo a seguir adiciona um cabeçalho de anfitrião para um site no IIS. Trata-se de alterar a propriedade ServerBindings. Não há nenhum método Append que pode ser usado para acrescentar um novo serverbinding a esta propriedade, então o que precisa ser feito é ler toda a propriedade e, em seguida, adicioná-lo de volta, juntamente com os novos dados. Isto é o que é feito no código abaixo. tipo de dados a ServerBindings estabelecimento se multisz, e o formato da cadeia é IP: Porta:. Hostname

Note que este código exemplo não faz qualquer verificação de erros. É importante que cada entrada ServerBindings é único, e você - o programador -. É responsável por verificar isso (o que significa que você precisa para fazer um loop através de todas as entradas e verificar se o que está prestes a ser adicionado é único)

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");
    }
}

Mas eu não tenho certeza de como percorrer os valores de cabeçalho para fazer a verificação de erro mencionado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top