User.Identity.Name
コントローラー外のクラスで作業するにはどうすればよいですか? クラス内でこのように使用しました
private readonly static string sLogon = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.LastIndexOf(@"\") + 1);
IIS 7.5 運用サーバーで null 参照を再実行します。開発サーバーで動作します。
ここでは、いくつかの代替手段を使用しました。
- 最初に使用し
Environment.Username
ました。これは開発でうまく機能します。しかし、出版後ではありません。その後Environment.Username
、アプリが実行されるアプリケーション プールの名前が生成されるためです。 Controller.User.Identity.Name
コントローラーで目的のユーザー名を取得するために使用され、公開前および公開後にうまく機能します。ただし、Class .cs のコンテキストでは使用できません。System.Web.HttpContext.Current.User.Identity.Name
null 参照を生成します。System.Security.Principal.WindowsIdentity.GetCurrent().Name
と同じように動作しますEnvironment.Username
使い方のアイデアはありますか?ありがとう
アップデート
環境によっては、ログイン ID を取得すると、Employee テーブルから EmployeeID や Email などの従業員情報を取得できます。例: Employee テーブルから Employee ID を取得してこのようにアクセスするための 1 つのクラス (コントローラの外部) があります。
string EmployeeID = new EmployeeService().EmployeeID();
private readonly static string sLogon = HttpContext.Current.User.Identity.Name.Substring(HttpContext.Current.User.Identity.Name.LastIndexOf(@"\") + 1);
public string EmployeeID()
{
var employee = new Common().Employee();
string sID = (from e in employee
where (e.LogonID ?? "N/A").ToLower().Contains(sLogon.ToLower())
select e.EmployeeID).FirstOrDefault();
return sID;
}