6

在现有的 .Net 网站中,服务器变量通过以下方式访问

HttpContext.Current.Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]

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

4

2 回答 2

8

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

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

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

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

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

显示接受语言的 Chrome 浏览器

  1. 较新版本的 .NET 中的 Http Request Message 类非常清晰易读。

    Windows .NET 框架中的请求消息

    dotnet 核心中的 HttpRequest 类

  2. 与 Web 服务器中编写的一些复杂的不透明逻辑相比,基于请求中的标头提供内容可能会变得很容易。在所有应用程序和服务器都变得更轻之后,轻量级和透明是值得的。为什么有人想在网络服务器中编写一个复杂的逻辑,而不是真正成为一个网络服务器。

因此,应用程序可以简单地检查 Request Header 集合。

再扩展一点,使用 dotnet core,有许多功能被公开,Web 服务器的实现可以支持这些功能。详细信息可以在这里找到。

可以在此处找到更多有助于理解框架和 Web 服务器如何巧妙解耦的详细信息

于 2016-07-18T11:49:47.010 回答
3

您不能,因为该应用程序现在已用完进程。然而,正如谦虚的听众指出的那样,大多数这些信息都可以在其他地方获得。接受语言是您唯一需要的吗?

于 2016-07-18T14:10:45.927 回答