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"]
Ответы
Ответ 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
}
}