所以我对 asp.net mvc 有点陌生,我正在构建一个多语言的网站,但我不想一直将 LanguageId 传递给每个特定于语言的对象的每个构造函数。在整个系统中将此 ID 存储在 asp.net mvc 中的最佳方法是什么?我相信对于用户来说,它被存储在一个 cookie 中,但这是正确的方法吗?
此外 languageId 来自数据库,所有语言特定标签也存储在数据库中而不是资源文件中
所以我对 asp.net mvc 有点陌生,我正在构建一个多语言的网站,但我不想一直将 LanguageId 传递给每个特定于语言的对象的每个构造函数。在整个系统中将此 ID 存储在 asp.net mvc 中的最佳方法是什么?我相信对于用户来说,它被存储在一个 cookie 中,但这是正确的方法吗?
此外 languageId 来自数据库,所有语言特定标签也存储在数据库中而不是资源文件中
老实说,我不得不不同意 Darin(在多线程多服务器环境中,这可能会造成问题)。
我会为此推荐一个 cookie,当用户在上次访问后再次进入您的网站时,它很容易被拾取。
如果您的登录是会话驱动的,您可以将您的登录存储language-id
在会话对象中。每次用户登录时都可以填充此对象。如果会话丢失,登录也会丢失。
如果您使用 Cookie 登录,请将其存储language-id
在 cookie 中。
或者,考虑将 LanguageID 作为路线的一部分。
routes.MapRoute(
"New",
"{lang}/{controller}/{action}/{id}",
new { lang = "en", controller = "Home", action = "Index", id = UrlParameter.Optional },
new { lang = "en|de|it|es|fr" }
);
用户登录后,立即重定向到包含语言作为路由一部分的路由。用于@Url.actionlink
呈现您的链接。它们将始终包含语言 ID。
对于您的特定问题采取稍微不同的方法,并使用可通过HttpRequest.UserLanguages获得的浏览器语言怎么样?
那么就不需要传递任何东西,因为你可以在任何你可以得到Request
对象的地方得到这个,例如在你的控制器中,它会是Request.UserLanguages