まず、悲しいことに、このコードを _Layout.cshtml に配置する必要があるのか、コントローラーのどこかに配置する必要があるのか わかりません。すべてのページで実行する必要があるため、_Layout.cshtml ページに配置しました。
これは、イントラネット Web アプリ用です。私がやろうとしているのはこれです:Cookie(ユーザーのユーザーIDを保持している)が見つからない場合は、Windowsのユーザー名を取得し、データベースにアクセスして対応するユーザーのユーザー名を取得するクラスを実行します。ユーザー ID を取得する - それを含む Cookie を作成します。それほど難しいことではありませんが、特に 1 つの行と、そのさまざまな化身は、サポートを拒否しています。全体としてのコードは次のとおりです。
if(!Context.Response.Cookies.AllKeys.Contains("userid")){
var winuser = System.Web.HttpContext.Current.User.Identity.Name;
var winuserid = myprojectname.Models.MyIntranetDataContext.getUserId(winuser).UserID();
if (winuserid == null) {
Response.Redirect("/someotherpage");
} else {
HttpCookie cookieuser = new HttpCookie("userid");
DateTime now = DateTime.Now;
cookieuser.Value = winuserid;
cookieuser.Expires = now.AddMonths(1);
Response.Cookies.Add(cookieuser);
}
}
行 2 - var winuser... -問題があるようです。この現在の化身では、ビルド エラーが発生しています。非静的フィールド、メソッド、またはプロパティ 'myprojectname.Models.MyIntranetDataContext.getUserId(string)' にはオブジェクト参照が必要です。
.ToString を追加しても気に入りません。
私もwinuserをこれにしようとしました: Page.User.Identity.Name;
これにより、ビルド エラーは発生しませんでした。デバッグを開始しようとすると、彼女はこの美しいエラーで爆発します:「null 参照でランタイム バインディングを実行できません」
Windowsのユーザー名を取得したら、すべてうまくいきます。
実際、これは Cookie に関するものではなく、MVC に関するものでもありません (ただし、このコードを配置する場所に関するガイダンス - _Layout.cshtml?) は除きます。本当にそれは私ができないように見えるWindowsのユーザー名を取得することです。何卒よろしくお願い申し上げます。
上記の名前は実際のものではないことに注意してください - 単なる例です。