0

まず、悲しいことに、このコードを _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のユーザー名を取得することです。何卒よろしくお願い申し上げます。

上記の名前は実際のものではないことに注意してください - 単なる例です。

4

1 に答える 1

2

それらがドメインにある場合、次のようなものを使用してその情報を取得できませんでしたか?

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

WindowsPrincipal principal = (WindowsPrincipal)Thread.CurrentPrincipal;
WindowsIdentity identity = (WindowsIdentity)principal.Identity;

String userName= principal.Identity.Name;
于 2013-01-25T18:54:48.743 に答える