iT邦幫忙

0

請教user?.Identity?.IsAuthenticated的?.是什麼意思?為何要?,我試了沒有?也不會錯

c#
  • 分享至 

  • xImage
//取得使用者資訊
public User GetUser()
{
    //取得 ASP.NET 使用者
    var user = HttpContext.Current.User;

    //是否通過驗證
    if (user?.Identity?.IsAuthenticated == true)
    {
        //取得 FormsIdentity
        var identity = (FormsIdentity)user.Identity;

        //取得 FormsAuthenticationTicket
        var ticket = identity.Ticket;

        //將 Ticket 內的 UserData 解析回 User 物件
        return JsonConvert.DeserializeObject<User>(ticket.UserData);
    }
    return null;
}
天黑 iT邦研究生 5 級 ‧ 2021-11-03 16:50:23 檢舉
```
if (user.Identity.IsAuthenticated)
```
這樣就可以了, == true是多餘的
如果用 ?. 的時候可能會是 Null,這時候的 == true 就不是多餘的了
天黑 iT邦研究生 5 級 ‧ 2021-11-04 17:08:10 檢舉
伊果 你說的對 也許用 Request.IsAuthenticated 判斷比較快
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2021-11-03 14:51:29
最佳解答

只有在運算元為非 null 時,才執行成員或元素存取作業
用白話說
user(identity)的值有兩種情形
1.not null - 此時寫不寫 ? 都沒差
2.null - 寫 null 得到 null 的結果;不寫 null 會得到 exception
所以為了「保險」起見
就在後面寫個 ?

時間過得真快
兩個半月時間過去了
不知道還會覺得 C# 很難嗎
/images/emoticon/emoticon10.gif

Jason iT邦新手 4 級 ‧ 2021-11-03 16:56:16 檢舉

感謝,一知半解,連到微軟看完全看不懂,不過我猜一下因為你說是null user? user是null就等於null
c#基本的用法是還好,只是裏面一大堆額外using引入的功能,點來點去,有點像是做好的零件,網路查到就拿來照貼,裏面的功能只能在執行時用中斷點去查看區域變數顯示什麼,才大約知道這個功能是什麼

程式寫得出來就好了
/images/emoticon/emoticon28.gif

froce iT邦大師 1 級 ‧ 2021-11-04 07:53:17 檢舉

要習慣自己查api,人家弄套件出來也是希望有人用,通常都會有api列表,詳細一點的會有說明。

1
bachikevin
iT邦新手 5 級 ‧ 2021-11-03 14:43:12

null 條件運算子

當在讀取一個null的物件時,會發生NullReferenceException的例外
因此需要對物件是否為null做判斷,確保不會有例外的產生

if (user?.Identity?.IsAuthenticated == true)
上列?.的判斷就相當於以下的code
code的長度和簡潔度就差很多

if (user != null)
{
    if (user.Identity != null) 
    {
        if (user.Identity.IsAuthenticated == true) 
        {
            // 後續處理
        }
    }
}

拿掉?.也沒有問題
因為HttpContext.Current.User在你執行過程不是null
但某一天他是null的話就...

Jason iT邦新手 4 級 ‧ 2021-11-05 11:01:49 檢舉

這個我就稍為理解(user != null),
if (user.Identity.IsAuthenticated == true) 也能知道意思
但中間為何加?還是看不出來為什麼

我要發表回答

立即登入回答