프로그래밍 방식으로 웹 사이트에 IIS 호스트 헤더를 추가하십시오

StackOverflow https://stackoverflow.com/questions/190043

  •  06-07-2019
  •  | 
  •  

문제

관리 페이지가 호스팅되는 웹 사이트에 IIS 호스트 헤더를 추가 할 수있는 관리 페이지 (ASP.NET/C#)를 설정하고 싶습니다. 이게 가능해?

HTTP 헤더를 추가하고 싶지 않습니다. IIS로 들어가는 동작을 수동으로 모방하고 웹 사이트의 속성을 가져오고 웹 사이트 탭에서 고급 클릭 및 고급 웹 사이트 식별 화면 및 새로운 "ID"를 클릭합니다. 호스트 헤더 값, IP 주소 및 TCP 포트.

도움이 되었습니까?

해결책

여기에 포럼이 있습니다 프로그래밍 방식으로 RSS 사이트에 다른 신원을 추가합니다

또한 방법에 대한 기사가 있습니다 IIS의 코드별로 호스트 헤더를 추가하십시오:

다음 예제는 IIS의 웹 사이트에 호스트 헤더를 추가합니다. 여기에는 ServerBindings 속성을 변경하는 것이 포함됩니다. 이 속성에 대한 새로운 서버 바인딩을 추가하는 데 사용할 수있는 Append 방법은 없으므로 수행해야 할 작업은 전체 속성을 읽은 다음 새 데이터와 함께 다시 추가하는 것입니다. 이것은 아래 코드에서 수행되는 것입니다. ServerBindings 속성의 데이터 유형은 Multisz이며 문자열 형식은 ip : port : hostname입니다.

이 예제 코드는 오류 확인을 수행하지 않습니다. 모든 ServerBindings 항목이 고유 한 것이 중요하며, 프로그래머는이를 확인해야합니다 (즉, 모든 항목을 통해 루프를 반복하고 추가 될 것이 고유한지 확인해야 함).

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

그러나 언급 된 오류 확인을 수행하기 위해 헤더 값을 통해 루프하는 방법을 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top