在ASHX处理程序上更改Thread.CurrentThread.CurrentCulture

时间:2009-08-20 17:12:31

标签: asp.net cultureinfo

我想更改网站上的语言。我以为我可以使用Handler来做,所以下拉将用于http://domain.com/Handler.ashx?language=en-US,f.i。

因此,它调用具有以下代码的处理程序:

string selectedLanguage = context.Request.QueryString["language"];

    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);

    context.Response.ContentType = "text/plain";
    context.Response.Write("Hello World");

    context.Response.Redirect(context.Request.UrlReferrer.AbsoluteUri.ToString());

但是当它返回时,Thread.CurrentThread.CurrentCulture被设置为pt-BR,这是初始值。

我的问题是:处理程序上的线程与加载内容的aspx页面不同?你会建议什么作为解决方法?

谢谢

1 个答案:

答案 0 :(得分:1)

Response.Redirect()将HTTP重定向发送回用户的浏览器,然后浏览器向服务器发出另一个请求。这导致IIS处理一个全新的请求,因此,创建了一个新线程来处理此请求。

虽然我不建议使用处理程序来完成此操作,但如果切换到Server.Transfer,您的想法可能会起作用,因为Server.Transfer不使用Http重定向,而只是创建一个通过ASP.NET管道发送的新请求,都在同一个初始请求的上下文中。

希望有所帮助,