基于url referrer更改ASP.NET MVC站点语言

时间:2015-02-25 16:33:51

标签: c# asp.net-mvc localization asp.net-identity owin

我认为我找到了一种方法(如下所述)来实现以下请求的方案,但我将描述完整的上下文,以防我错过了更简单和/或更简洁的解决方案。

上下文

我有一个使用以下内容的多文化站点:ASP.NET MVC 5,EF 6.1,ASP.NET Identity 2.2,SimpleInjector。它在Amazon EC2上托管,在Amazon RDS上使用sql server,而URL在www.register.it上注册。我通过FB,Linkedin,Google和Paypal付款实施外部OAuth登录。

我需要有多个网址(www.url-en.com,www.url-it.com等)都指向同一个网站,然后根据用户输入的网址更改语言和_layout(母版页)

解决方案

最初我想把所有网址都指向我网站的ip,但是这样我需要配置多个ssl证书(我甚至不知道它是否可能),更重要的是,我无法管理来自外部登录服务和PayPal付款的回调。

因此,我在注册商级别为每个网址配置了重定向,以指向主网址(英文网址),因此我可以在global.asax Application_Start中读取HTTP_REFERRER变量,并根据引荐网址设置文化Cookie。 我在Home控制器中设置了一个ActionMethod,用于设置文化cookie(同样由网站页面上的语言选择器使用),然后我有一个自定义RazorViewEngine来选择本地化视图(如果存在)

问题在于,如果app_pool处于集成模式,我无法在Application_Start中读取Request对象,所以我尝试在OWIN Configuration方法中执行此操作,但HttpContext.Current.Request.UrlReferrer为null。我应该从OWIN环境中获得推荐人吗?我怎么能这样做? 在javascript中检查url和referrer是否不同会更好/更简单吗?

由于 利玛

1 个答案:

答案 0 :(得分:1)

为什么不从浏览器中检测文化而不是使用单个网址?然后根据浏览器文化,您可以根据特定语言定制您的网址。

这将解决您的多个ssl问题,因为您只需要一个主域。它还会修复支付网关的回调网址。

http://www.url.com/en-us/
http://www.url.com/es-es/