프로그래밍 방식으로 웹 사이트에 IIS 호스트 헤더를 추가하십시오
-
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");
}
}
그러나 언급 된 오류 확인을 수행하기 위해 헤더 값을 통해 루프하는 방법을 잘 모르겠습니다.