Как настроить Webapi Selfhosted для нескольких HostHeaders

Я что поставить мой asp.net mvc4 web api отвечающий на несколько имен hostheader как когда мы добавляем несколько привязок сделать сайт iis.

Кто-нибудь знает, как я могу это сделать? или если это возможно?

мое приложение по умолчанию (все еще командная строка) выглядит так:

    static void Main(string[] args)
    {
        _config = new HttpSelfHostConfiguration("http://localhost:9090");

        _config.Routes.MapHttpRoute(
            "API Default", "{controller}/{id}",
            new { id = RouteParameter.Optional });

        using (HttpSelfHostServer server = new HttpSelfHostServer(_config))
        {
            server.OpenAsync().Wait();
            Console.WriteLine("Press Enter to quit.");
            Console.ReadLine();
        }

    }

2 ответа

Решение

Вы можете попробовать настроить ваши маршруты, чтобы иметь настраиваемое ограничение для соответствия заголовку хоста (в приведенном ниже примере маршрут будет совпадать, только если заголовок хоста равен myheader.com):

_config.Routes.MapHttpRoute(
        "API Default", "{controller}/{id}",
        new { id = RouteParameter.Optional },
        new { headerMatch = new HostHeaderConstraint("myheader.com")});

Код ограничения будет выглядеть примерно так:

public class HostHeaderConstraint : IRouteConstraint
{
    private readonly string _header;

    public HostHeaderContraint(string header)
    {
         _header = header;
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var hostHeader = httpContext.Request.ServerVariables["HTTP_HOST"];
        return hostHeader.Equals(_header, StringComparison.CurrentCultureIgnoreCase);
    }
}

@Mark Jones answer работает для самостоятельного решения, такого как ваш пример, но если вы в конечном итоге используете IIS, вам просто нужно добавить несколько привязок со всеми желаемыми заголовками хоста. Нет необходимости менять маршруты.

Другие вопросы по тегам