如何处理每个请求的会话Asp.net mvc
我有一个web应用程序在移动应用程序(WebView)中运行。当用户打开应用程序时,移动应用程序通过请求向我发送电话的语言信息。由于语言值仅在第一次请求时出现,然后被删除,因此我必须将其保存起来以备后续请求使用。我已经在global.asax上尝试了PreRequestHandlerExecute和Application_AcquisiteRequestState。我控制会议。如果为null,我从请求中获取值,如果不为null,我从会话中获取值。但会话似乎总是空的,并且总是从请求中获取值。有什么想法会很有帮助吗?谢谢你提前通知如何处理每个请求的会话Asp.net mvc,asp.net,asp.net-mvc-4,session,session-variables,session-state,Asp.net,Asp.net Mvc 4,Session,Session Variables,Session State,我有一个web应用程序在移动应用程序(WebView)中运行。当用户打开应用程序时,移动应用程序通过请求向我发送电话的语言信息。由于语言值仅在第一次请求时出现,然后被删除,因此我必须将其保存起来以备后续请求使用。我已经在global.asax上尝试了PreRequestHandlerExecute和Application_AcquisiteRequestState。我控制会议。如果为null,我从请求中获取值,如果不为null,我从会话中获取值。但会话似乎总是空的,并且总是从请求中获取值。有什么
var dilKodu = Request.Headers.GetValues("languageCode");
CultureInfo ci;
if (dilKodu != null)
{
//I set culture from request if it is not null.
ci = new CultureInfo(dilKodu[0].ToString());
this.Session["Culture"] = ci;
}
else
{
if (HttpContext.Current.Session != null)
{
//I get culture from Session if its set before.
ci = (CultureInfo)this.Session["Culture"];
if (ci == null)
{
string langName = "tr";
//If culture exist neither Session nor Request
ci = new CultureInfo(langName);
this.Session["Culture"] = ci;
}
}
else
{
ci = new CultureInfo("tr");
}
}
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
按照您的代码,您总是进入第一条if语句,该语句将读取并设置代码格式
dilKodu
您的代码应该更像这样
if (HttpContext.Current.Session != null)
{
ci = (CultureInfo) this.Session["Culture"];
if (ci == null)
{
var langName = Request.Headers.GetValues("languageCode");
Session["dilG"] = langName;
ci = new CultureInfo(langName);
Session["Culture"] = ci;
}
}
else
{
Session["dilG"] = "session hazır değil tr yapıldı";
ci = new CultureInfo("tr");
}
基本上,您的if语句设置不正确,不适合您尝试执行的操作
此外,最好将会话对象保持较小,即只在会话中存储langName并每次从中创建一个CultureInfo,而不是存储CultureInfo。这是一个MVC web应用程序吗?如果是这样,您可以尝试将该值保存在
Controller.TempData
中
因此,不要做this.Session[“culture”]=ci
您将添加到TempData属性TempData.add(“区域性”,ci)代码>。这将使区域性可用于下一个请求。您只需要确保在每个请求中重新添加ci
值,以使该值在您需要的时间内保持不变
TempDataDictionary的文档:这是由于web.config中的设置
<httpCookies requireSSL="true" httpOnlyCookies="true"/>
我试图保护cookie,但它阻止会话。我删除了它,现在一切正常。但我仍然需要找到一种方法来保护cookies。不,实际上我不是。如上所述;“languageCode”变量仅在第一次请求时存在。之后它是空的。这就是为什么我需要保持会议。在第一次请求之后,因为我无法获得“语言代码”,我需要从会话访问它。仍然认为if语句看起来有问题。然而,在会话中只存储langName而不是CultureInfo可能是明智的,而CulrureInfo是可序列化的,最好保持较小的规模。您能确认您的会话配置是否正确吗?TempData由会话支持,并且由于OP希望在后续请求中使用它,我建议会话是合适的方法,而不是TempData,这更像是在故障后良好点后返回错误消息。我想我是在尝试提供一种可能的解决方法,因为OP指出尝试访问HttpContext.Current.Session始终返回null。