なるほど、タイトルはわかりやすいと思います。
2 に答える
最大の違いは、それらが同じである必要がないことです。
一般的に言えば、HttpContext.Current.Userはログオン ユーザー (ワーカー スレッドで呼び出された場合) でThread.CurrentPrincipalあり、 はワーカー プロセス ID です。
IIS 5.x ではThread.CurrentPrincipal、デフォルトでASPNET. IIS 6 以降でThread.CurrentPrincipalは、既定でNetwork Service(または変更後のアプリケーション プール ID) です。
複雑にするために、ASP.NET の偽装を有効にすると、両方がログオン ユーザーと同じになる可能性があります。
このトピックに関する非常に優れた本や Microsoft MSDN の記事を読むようにしてください。
http://msdn.microsoft.com/en-us/library/ms998351.aspx
もう 1 つの提案は、デバッガーを使用してワーカー プロセスにアタッチし、実行時にそれらをチェックすることです。その方が見栄えが良くなります。
HttpContext.Current.Userログオン ユーザー ID を照会する最良の方法ではないことに注意してください。Page.UserWebForms、Controller.UserMVC、およびApiController.UserWeb APIに固執する必要があります。
もう 1 つの大きな違いは、コードが常に HttpContext にアクセスできるとは限らないことです。(たとえば、Web アプリケーションから使用される場合と使用されない場合があるアセンブリにすべての BL がある場合) 2 つのユーザー アカウントは異なる場合がありますが、Thread.CurrentPrincipal を使用すると、コードは常に取得できます。コード内のどこにいても、そのユーザー オブジェクトで。