2017-08-09 43 views
0

我很困惑,为什么这是发生在我的应用程序。我有一个从Session存储中获得的对象,但是在某些情况下它可能不存在,所以我正在做一些三元检查。即使使用三元检查,我也会在userInfo上使用空引用异常进行错误检查。另一个奇怪的部分是,当我检查firstName和lastName时,它们都显示“???”。三元支票C#空参考例外

@{ 
    // Session storage for user info 
    var userInfo = Session["UserInfo"] as UserInfo; 

    var firstName = userInfo != null ? userInfo.FirstName : "???"; 
    var lastName = userInfo != null ? userInfo.LastName : "???"; 
} 

<div> 
    @firstName @lastName // Errors here with object reference not set to an instance of an object. 'userInfo' was null 
</div> 

我疯了吗?我发誓,这是我可以检查无效问题的方法。

+0

根据我的经验,当Visual Studio在Razor代码中识别出一条引发异常的行时,该异常实际上被抛出。 – Amy

+0

不确定这是否有效,但三元检查使代码阅读,理解和维护变得复杂得多。 Var具有相同的效果。请使用[strong typing](https://en.wikipedia.org/wiki/Strong_and_weak_typing)。 – SneakyTactician

+0

你在视图中做什么的任何原因? –

回答

0

评论:我已经开发了几个MVC小规模的应用程序,但是这是我的 第一用户基于身份的应用程序。我希望能够访问 用户信息,无论他们在应用程序中。我是否需要 原则来完成此任务?

首先,我们不应该在会话中存储用户信息来检查用户是否被认证。这是非常脆弱的,它不能使用ASP.NET MVC的内置授权属性。

理想情况下,您想要使用ASP.NET Identity。如果您是ASP.NET身份的新手,则可能需要观看free ASP.NET MVC 5 Fundamentals course by Scott Allen

如果您已有一个现有的用户数据库,并且不想使用ASP.NET标识,那么您可以使用Owin身份验证中间件。您可以在this SO阅读更多内容,here是正在使用的示例代码。

+0

所以我实际上是在应用程序中使用Identity。我已经为我的控制器和操作获得了用户流设置正常和授权属性。我的主要问题是,我希望能够访问相应AspNetUser纪录为当前登录的用户在相当多的意见。 (我已经建立的,我想访问的显示信息的一些自定义的关系),我想这就是为什么我试着下去会话路由。我应该这样做吗? – tokyo0709