0

这是我的代码:

public partial class context_userpanel_IoSocial : iUserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Session["oom-user"] = "utente";

        if ((UserOOM)Session["oom-user"] == null)
        {
            Response.Write("not logged");
        }

        Response.Write("logged");
    }
}

中的对象Session["oom-user"]是类型UserOOM。但是如果我在会话中存储一个字符串,我看不到任何Response.Write. 为什么这个?我该如何解决?

4

5 回答 5

1

您看不到任何内容Response.Write,因为强制转换UserOOM失败并出现运行时异常,导致应用程序停止运行。

如果您想在同一个会话变量中存储不同类型的数据(这可能不是最好的主意),则在取出它们时必须使用is/as而不是直接转换,例如:

if (Session["oom-user"] is UserOOM)
{
    // something 
}
else if (Session["oom-user"] is string)
{
    // something else
}
于 2013-09-11T09:25:01.630 回答
1

中的对象Session["oom-user"]是类型UserOOM

不是来自您的代码:

 Session["oom-user"] = "utente";

这将放入并使类型转换失败并出现异常stringSession["oom-user"]

于 2013-09-11T09:25:32.243 回答
0

引发不可见异常的不是Session对象,并且异常不是不可见的。

想象一下:你有一个对象类型的变量,它存储一个字符串。

object variable = "Test";

使用convert运算符,然后将其值转换为不兼容的类型(它不是string或 的子类string,而是string密封类型,因此可以正常string工作):

SomeOtherClass asAstring = (SomeOtherClass)variable;

InvalidCastException与操作员所做的相反,这失败了as

SomeOtherClass thisWillBeNUll = variable as SomeOtherClass;

所以你看,抛出异常的不是Session对象。当你写

if ((SomeClass)Session["somekey"] == null) { ... }

你实际上是在写:

object thisIsOk = Session["somekey"]; // this is not the throwing place
SomeClass temp = (SomeClass)thisIsOk; // this is the throwing place

// and you won't be reaching any code until the closest `catch` clause up the stack
if (temp == null) {
}
于 2013-09-11T09:32:47.480 回答
0

是字符串"utente"类型UserOOM吗?不。

您需要修复该if子句,如果您只想检查它是否是,则根本不需要强制转换null

    Session["oom-user"] = "utente";
    if (Session["oom-user"] == null)
    {
        Response.Write("not logged");
    }
    else
    {
        Response.Write("logged");
    }

这种“认证”显然不是很安全:)

于 2013-09-11T09:28:07.940 回答
0
protected void Page_Load(object sender, EventArgs e)
{
    object obj = Session["oom-user"];
    if (obj is UserOOM)
    {
        Response.Write("logged in");
    }
    else
    {
        Response.Write("not logged in");
    }
}
于 2013-09-11T09:47:18.253 回答