asp.net-core - 如何在AspnetCore 1.0中访问ServerVariables

标签 asp.net-core httpcontext server-variables request.servervariables

在现有的 .Net 网站中,使用

访问服务器变量
HttpContext.Current.Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]

如何访问 AspnetCore 1.0 Web 应用程序中的 ServerVariables?
在 Controller 内部调试时, this.HttpContext.Features 不包含 IServerVariablesFeature

最佳答案

好吧,我不会直接回答你的问题。我将尝试阐明为什么这个服务器变量不再是问题。

“HTTP_ACCEPT_LANGUAGE”是 IIS 和 .NET 用于促进 ASP.NET 框架与应用程序进行内容语言通信的服务器变量。

过去,浏览器并不一致,并且没有一致地传递 Accept-Language header 。 为了填补这一空白,IIS 等应用程序服务器必须通过智能设置来弥补这一缺陷,通过使用 header 、用户代理字符串和服务器上的默认配置的组合来弥补与应用程序相关的内容。 p>

我们不再需要它的原因很少,

  1. 几乎所有浏览器都设置 Accept-Language header 。您只需转到您喜爱的浏览器的开发工具中的“网络”选项卡并检查 HTTP 请求 header 即可看到这一点。

Chrome browser showing accept language

  • 较新版本的 .NET 中的 Http Request Message 类非常理智且易于阅读。

    Request Message in windows .NET framework

    HttpRequest class in dotnet core

  • 与 Web 服务器中编写的一些复杂的不透明逻辑相比,基于请求中的 header 提供内容可能会变得更加简单。在所有应用程序都变得越来越轻之后,服务器也变得越来越轻,因此轻量和透明是值得的。为什么有人想在网络服务器中编写复杂的逻辑,而这并不是真正的网络服务器。

  • 因此,应用程序可以简单地检查请求 header 集合。

    进一步扩展一下, 使用 dotnet core,有许多公开的功能,Web 服务器的实现可以支持这些功能。详情可参见here .

    更多有助于理解框架和网络服务器如何巧妙解耦的细节可以是 found here

    关于asp.net-core - 如何在AspnetCore 1.0中访问ServerVariables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429604/

    相关文章:

    c# - 从异步方法返回任务以外的对象

    asp.net-mvc - 将 HttpContext.Current.User.Identity 传递给 WCF

    c# - 使用 aspnetcore 2.2 联合 Azure AD 登录后,User.Identity.Name 为空

    php - 从命令行访问 $_SERVER 变量

    Jquery/.Net在Ajax调用的数据中传递服务器变量

    c# - .NET Core 中的 NLog 事件属性

    javascript - ASP.NET Core 3.0 MVC 连接中的 SignalR 保持事件状态不起作用?

    asp.net - HttpContext.Current.Items 重用吗?

    meteor - 我应该如何存储来自第三部分 api 的访问 token

    asp.net-core - Asp.net Core最佳实践示例