读取布局文件中的整数会话值

时间:2019-04-13 23:38:17

标签: c# asp.net-core

_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仅返回字节。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

ISession命名空间的Microsoft.AspNetCore.Http上有一些extension methods。因此,只需包含该名称空间,然后就可以直接使用方法GetInt32GetString

这样可以避免您以字节为单位读取会话数据并将其首先转换为字符串:

// 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"); }