【问题标题】:ASP.NET Web API: How do you read server variables in a Web API controller?ASP.NET Web API:如何在 Web API 控制器中读取服务器变量?
【发布时间】:2013-04-26 04:41:14
【问题描述】:

您将如何在 ASP.NET Web API 控制器中读取以下服务器变量?

HTTP_HOST
SERVER_NAME
REMOTE_HOST / REMOTE_ADDR

我看到定义了 System.Net.Http.HttpRequestMessage 请求,但没有看到包含这些变量的集合。

我正在使用多个主机标头的单个 IP 上运行一个网站,我需要确定他们用来到达那里的网站。

编辑:

结果是这样的:

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

【问题讨论】:

标签: asp.net-web-api


【解决方案1】:

您要查找的信息取决于您使用的主机,而 Web API 旨在独立于主机。所以....您要查找的信息将被隐藏在 httpRequestMessage.Properties 集合中,并且会因您的主机而异。

如果您转而使用 Owin 适配器,那么您将获得一个标准化的 Owin 环境对象。

【讨论】:

  • 好建议。我可以看到 Request.Properties["MS_HttpContext"].Request.Url 和 UrlReferrer。最大的问题是它是否代表他们访问的网站的主机头。
  • 我想知道msdn.microsoft.com/en-us/library/… 是否是一种无论托管环境如何都可以一致地读取此信息的方式?
  • ((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.ServerVariables["HTTP_HOST"]
  • 博士。 Zim,您的评论值得自己回答。我每隔一段时间就会回到这个问题,并且在找到您的评论之前必须阅读整个页面。
【解决方案2】:

我能够从 Request 中的 RequestUri 获取所有这些信息

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

【讨论】:

  • 好吧,这仅适用于主机 uri。但不适用于服务器变量中的任何其他内容。
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 2016-06-12
  • 2013-06-23
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
相关资源
最近更新 更多