Подтвердить что ты не робот

ASP.NET Web API: как вы читаете переменные сервера в контроллере Web API?

Как бы вы читали следующие серверные переменные в контроллере ASP.NET Web API?

HTTP_HOST
SERVER_NAME
REMOTE_HOST / REMOTE_ADDR

Я вижу запрос System.Net.Http.HttpRequestMessage, но я не вижу коллекцию, содержащую эти переменные.

Я запускаю веб-сайт на одном IP-адресе с несколькими заголовками хостов, и мне нужно определить, какой сайт они использовали для доступа.

EDIT:

В итоге получилось что-то вроде этого:

((System.Web.HttpContextWrapper) Request.Properties["MS_HttpContext"])
    .Request.ServerVariables["HTTP_HOST"]
4b9b3361

Ответ 1

Информация, которую вы ищете, зависит от используемого вами хоста, а веб-API разработан как независимый от хоста. Итак... информация, которую вы ищете, будет похоронена в коллекции httpRequestMessage.Properties, и она будет отличаться в зависимости от вашего хоста.

Если вы перейдете к использованию адаптера Owin, вы получите стандартизованный объект среды Owin.

Ответ 2

Я смог получить всю эту информацию из RequestUri в запросе

  Request.RequestUri.Scheme + Uri.SchemeDelimiter + 
  Request.RequestUri.Host + (Request.RequestUri.IsDefaultPort ? string.Empty : (string.Concat(":", Request.RequestUri.Port)))

Ответ 3

Так же, как этот

using System;
using System.Web.Mvc;

 public class MyController : Controller
 {
    public ActionResult Index()
    {
        var httpHost = Request.ServerVariables["HTTP_HOST"];
        // etc
    }
}