2016-10-25 4 views
-1

私はasp.netコアのstartup.csに現在ログインしているユーザー名を取得する方法は?

(MVC .NET CORE)startup.csにユーザー名で現在のログに記録されたを取得する必要があり、事前に

おかげ..あなたが同じのために任意のソリューションを持っている場合は私に知らせてください!

+1

これは実用的である何かのような音はありません。なぜ地球上でそれが必要なのでしょうか?さらに、なぜ誰かがログインしていると仮定していますか? 'Startup.cs'では、サーバは文字どおりサービスを提供するアプリケーションを初期化しています。これは、ログインしているユーザがいないと言います。これは、アプリがすでにログイン画面を発行していたと仮定します。 '早く走った。 –

+0

私は@DavidPineに同意し、この質問をする前に少ししか研究をしていないようだと付け加えたいと思います。 – Brad

+0

@DavidPineとBradに同意しますが、私の要件は、ユーザーがアプリケーションにアクセスするときにユーザー名を取得する必要があることです。アプリケーションはWindows認証を使用しています。したがって、ログインページはありません。ユーザーは、URLを使用してアプリケーション内の任意のページに直接移動できます(彼はページに自宅に直接来ていない可能性があります)。アプリケーションが起動時にアクセスされるときに実行される一般的なページ。したがって、私はそれを使うことを考えました。 – Vijay

答えて

2

Startupクラスの目的は、アプリケーションのDependency Injectionコンテナと要求パイプラインの両方を構成することです。要求にバインドされておらず、アプリケーションの起動時にのみ実行されるため、スタートアップという名前が付けられます。

ログインしたユーザーを使用する典型的な場所は、middlewarecontrollersです。

+0

@Henkと同意してください。しかし、私の要件は、私はいつでもユーザーがアプリケーションにアクセスするときにユーザー名を取得する必要があります。アプリケーションはWindows認証を使用しています。したがって、ログインページはありません。ユーザーは、URLを使用してアプリケーション内の任意のページに直接移動できます(彼はページに自宅に直接来ていない可能性があります)。アプリケーションが起動時にアクセスされるときに実行される一般的なページ。したがって、私はそれを使うことを考えました。 – Vijay

+0

Elseすべてのコントローラにロギングコードを追加する必要があります。繰り返しますが、複数のエントリが追加されるという問題が発生します(ユーザーがページを更新するときと、ユーザーがページを再訪するたびに)。この要件に適したstartup.cs以外のページはありますか?提案してください – Vijay

0

ミドルウェアはあなたが探しているものです。それはシーケンシャルなので、ミドルウェアを最初に配置すると、ミドルウェアは選択したリクエストをインターセプトし、そうした場合は残りのアプリケーションへのアクセスを阻止することができます。

0

startup.csがアプリケーションのライフサイクル全体を通じて使用されていることを示す必要があります。 たとえば、Configureメソッド(起動up.cs)で、アプリケーションエラーを処理します。

次のようにHTTPコンテキスト内からユーザー情報をretriveことができます。

public void Configure(IApplicationBuilder app, IHostingEnvironment  
env, ILoggerFactory loggerFactory) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 
     if (env.IsDevelopment()) 
     { 
      app.UseBrowserLink(); 
      app.UseDeveloperExceptionPage(); 
      app.UseDatabaseErrorPage(); 
     } 
     else 
     { 
      app.UseExceptionHandler(errorApp => 
      { 
       errorApp.Run(async context => 
       { 
        context.Response.StatusCode = 500; 
        var error = context.Features.Get<IExceptionHandlerFeature>(); 
        if (error != null) 
        { 
         Exception ex = error.Error; 
         var theUser = context.User.Identity.Name; 
         //send email with user name 
      //do somehting 
        } 
       }); 
      }); 
     } 

    //part omitted for simplicity 
} 
関連する問題