在_Layout
文件中,我需要从会话中读取一个int变量数据。
我可以很容易地读取字符串,但是整数却很难。
我将此代码用于字符串:
var sessionImg = new Byte[20];
bool imageStatus = Context.Session.TryGetValue("_Image", out sessionImg);
if (imageStatus)
{
string result = System.Text.Encoding.UTF8.GetString(sessionImg);
}
对于整数,我将Byte转换为字符串,而不是将字符串转换为Int。
var ByteClientID = new Byte[20];
bool IdStatus = Context.Session.TryGetValue("_ClientID", out ByteClientID);
if (IdStatus)
{
string result1 = System.Text.Encoding.UTF8.GetString(ByteClientID);
int intSessionValue = 0;
bool isConvertOK = Int32.TryParse(result1, out intSessionValue);
if (isConvertOK)
{
........
}
}
它正在工作,但我不喜欢此代码。看起来不正确。
Context.Session.TryGetValue
仅返回字节。
有人可以帮我吗?
答案 0 :(得分:2)
在ISession
命名空间的Microsoft.AspNetCore.Http
上有一些extension methods。因此,只需包含该名称空间,然后就可以直接使用方法GetInt32
和GetString
。
这样可以避免您以字节为单位读取会话数据并将其首先转换为字符串:
// using Microsoft.AspNetCore.Http;
string sessionImg = Context.Session.GetString("_Image");
int clientId = Context.Session.GetInt32("_ClientID");
要在Razor视图中导入名称空间,可以使用@using
指令:
@using Microsoft.AspNetCore.Http;
<p>Image value: @Context.Session.GetString("_Image")</p>
<p>Client id: @Context.Session.GetInt32("_ClientID")</p>
答案 1 :(得分:0)
查看此链接:How to get a session value in layout file in ASP.NET 5 MVC6
答案说: Context和HttpContext之间的命名有些混乱。您可以使用Context属性在视图中访问HttpContext:
@{ int x = Context.Session.GetInt32("test"); }