1

コントローラーにログインしているユーザー名を取得しようとすると、常に空の文字列が返されます。最初にアプリを作成したとき、「インターネット アプリケーション」テンプレートを選択しました。また、デフォルトのアカウント コントローラー、アカウント モデル、および _logon ビューは不要なので削除しました。独自のスタイリングを使用しているため、プロジェクトからも site.css を削除しました。

しばらくweb.configをいじった後、web.configの認証モードをWindowsに変更すると、「User.Identity.Name」が実際に機能することがわかりました。「フォーム」認証モードのままにしておくと、ユーザー名を取得しようとするたびに空の文字列しか取得できません。

最近、認証モードを Windows に変更し、コントローラーの 1 つで User.Identity.Name を使用してユーザー名を取得しましたが、アプリを実行するたびにブラウザーでエラーが発生し、"localhost/Account/LogOn/ ..." 見つかりません。(私の通常のビューへの指示ではありません) ( Global.asax にも変更を加えていません。)

認証モードをフォームに戻すと、ビューは正常に機能しますが、ユーザー名が表示されません (空の文字列のみ)。とにかく、この問題を回避する方法を見つけることができますか? ルーティングなどに何か問題がありますか? 「イントラネット アプリケーション」テンプレートを使用して最初からやり直す余裕はありません。

私はMVCの初心者なので、どんな助けでも大歓迎です。

ありがとう

4

3 に答える 3

2

asp.net mvcを使用している場合は、試してくださいSystem.Environment.UserName

web.config内で、使用します

<authentication mode="Windows" />
<identity impersonate="true" />

あなたが得ているエラーは、アプリケーション内のどこかでまだ参照されている必要があるログオン ビューを削除したためです。そのため、ログオン ビューが必要ない場合は、コードからすべての参照を削除してください。

于 2012-09-06T19:04:52.790 に答える
0

インターネット アプリケーションは、デフォルトでフォーム認証を使用して動作します。Windows 認証の目的は、Web アプリケーションが Windows ユーザーの下で実行されるイントラネット用です。その後、認証は「自動的に」機能します。

登録ユーザーがいるインターネット アプリケーションが必要な場合は、web.config に次の構成を配置する必要があります。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

次に、AccountController (既定のテンプレートにあり、おそらく削除した) と、コントローラー内の Logon アクションが必要です。また、アカウント コントローラーのすべてのビュー (ログオン、登録、パスワードの変更など) も必要です。最良の方法は、新しいインターネット アプリケーションを作成し、そこにあるすべてのものを確認することです。必要なものをアプリケーションにコピーするだけです。

ユーザー データベースも必要です。デフォルトでは、標準のテーブルとストアド プロシージャを備えた高速データベースが使用されます。必要に応じて、独自のテーブルを使用できます。その後、アカウント コントローラーのメソッドを書き直すか、独自のメンバーシップ プロバイダーを作成する必要があります。

ユーザー名が表示されないのは、ログインしていないためです。

編集: Windows ユーザー名を表示する場合は、認証モードを windows に設定する必要があります (または、認証セクションを削除するだけです。これがデフォルトです)。その後、ユーザー名にアクセスできます。ただし、タグを削除する必要があります。

<authentication mode="Windows" /> 
于 2012-09-06T19:23:11.727 に答える
0

最初に認証さえしていないように聞こえるので、ユーザー名はありません:

@if (Request.IsAuthenticated) {
    <span>@User.Identity.Name</span>
}
else {
    <span>You aren't authenticated</span>
}
于 2012-09-06T19:49:20.420 に答える