5


1

管理ページがホストされているWebサイトにIISホストヘッダーを追加できる管理ページ(ASP.NET / C#)を設定したいです。 これは可能ですか?

httpヘッダーを追加したくありません。IISに手動でアクセスし、Webサイトのプロパティを表示し、Webサイトタブで[詳細設定]をクリックし、新しいWebサイトの識別画面と新しい "ID"を追加します。ホストヘッダー値、IPアドレス、TCPポート。

1 Answer


2


これはhttp://forums.iis.net/t/1147522.aspx [フォーラムによるプログラムによるサイトへの別のIDの追加]のフォーラムです。

また、https://web.archive.org/web/20090210085202/http://www.gafvert.info/notes/csharp_add_host_header.htm [IISのコードでホストヘッダーを追加する]に関する記事もあります。

_ _ 次の例では、IISのWebサイトにホストヘッダーを追加します。 これにはServerBindingsプロパティの変更が含まれます。 このプロパティーに新しいサーバー・バインディングを追加するために使用できるAppendメソッドはありません。そのため、実行する必要があるのは、プロパティー全体を読み取ってから、新しいデータと共に再度追加することです。 これは以下のコードで行われることです。 ServerBindingsプロパティのデータ型はMULTISZで、文字列形式はIP:Port:Hostnameです。

このサンプルコードはエラーチェックを行いません。 すべてのServerBindingsエントリが一意であることが重要です。あなた(プログラマ)はこれをチェックする責任があります(つまり、すべてのエントリをループ処理し、追加しようとしているものが一意かどうかをチェックする必要があります)。 _ _

using System.DirectoryServices;
using System;

public class IISAdmin
{
    ///
    /// 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
    ///
    /// The host header. Must be in the form IP:Port:Hostname
    /// The ID of the website the host header should be added to
    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");
    }
}

しかし、私は言及されたエラーチェックをするためにどうやってヘッダー値をループするかわからない。