2017-09-15 4 views
2

問題:通常のユーザーが管理者のみがアクセスできるページにアクセスしようとするたびに、ユーザーは常にアクセス拒否ページの代わりにログインにリダイレクトされます。Asp Net Core Authorization

質問:ユーザーが制限されたページにアクセスするたびに、通常のユーザーはアクセス拒否ページをどのように見ることができますか?

コントローラー:

[Authorize(Roles = "Administrator")] 
public class AdminOnlyController: Controller{ 

} 

Startup.cs

app.UseIdentity(); 

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
{ 
      AuthenticationScheme = "FirstCookieAuthentication", 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      AccessDeniedPath = new PathString("/Forbidden/"), 
      LoginPath = new PathString("/Conotroller/Login"), 
}); 
+0

更新を参照してください –

答えて

0

アクセス拒否では見られない、内部エラーのような単なるステータスコードなどのステータスコードあなたは、ミドルウェアを使用することができますを管理するには"app.UseStatusCodePages"

コード:その後、

if (env.IsDevelopment()) 
{ 
//  see something more here 
} 
else 
{ 
     app.UseStatusCodePagesWithReExecute("/StatusCode/{0}"); 
} 

StatusCodeController内部、あなたが提供するルートと一致した行動結果を構築し、例:私はIActionFilterインタフェースを実装するカスタム属性を作成されたのは何

[HttpGet("/StatusCode/{statusCode}")] 
    public IActionResult Index(int statusCode) 
    { 
     string statusmessage = ""; 
     switch (statusCode) 
     { 
      case 400: 
       statusmessage = "Bad request: The request cannot be fulfilled due to bad syntax"; 
       break; 
      case 403: 
       statusmessage = "Forbidden"; 
       break; 
//all codes here... 
      default: 
       statusmessage = "That’s odd... Something we didn't expect happened"; 
       break; 
     } 

     // return appropriate view 
     // or same view with different message, eg from ViewBag 
    } 
+0

uhmm私は応答ステータスコードを確認し、通常のユーザーであっても制限付きページにアクセスしても常に200を返します。 –

0

と属性クラスを継承します。だから、基本的には私のコードをOn Action Executing Methodの中に入れます。しかし私はthisスレッドを読んでカスタム属性を作成しないことについても説明しました。しかし、私はコメント欄で議論全体を読まなかった。とにかくこれは私の場合に適しています。