2016-05-09 24 views
0

コントローラのアクションに次のコードがあります。私は15以上のコントローラと40以上のアクションをアプリケーションから持っています。例:セッションオブジェクトをチェックし、それに応じて返信します

//Check if USER SESSION object is available 
if (Session["user"] != null) 
{ 
    return View(); 
} 
else 
{ 
    return RedirectToAction("logout", "Home", new { area = "Common", value = "SessionTimeOut" }); 
} 

すべての40のアクションに対してifステートメントを繰り返す必要はありません。これを行うためのよりよい方法はありますか?

+0

をリピート能力をソートしなくても、これはすでに改善されています: 'return Session [" user "]!= null? –

答えて

0

AuthenticationFilters(MVCのチュートリアルについては、hereを参照してください)を参照してください。

FTA:

public class CustomAuthenticationAttribute : ActionFilterAttribute, IAuthenticationFilter 
{ 
    public void OnAuthentication(AuthenticationContext filterContext) { 

     //For demo purpose only. In real life your custom principal might be retrieved via different source. i.e context/request etc. 
     filterContext.Principal = new MyCustomPrincipal(filterContext.HttpContext.User.Identity, new []{"Admin"}, "Red"); 
    } 

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext) { 
     var color = ((MyCustomPrincipal) filterContext.HttpContext.User).HairColor; 
     var user = filterContext.HttpContext.User; 

     if (!user.Identity.IsAuthenticated) 
     { 
      filterContext.Result = new HttpUnauthorizedResult(); 
     } 
    } 
} 

FTAの利用状況:

public class HomeController : Controller 
{ 
    //***here is where it's applied. you can also do this globally in Global.asax if preferred*** 
    [CustomAuthentication] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
0

[CustomAuthentication]属性を指して答えを補うために、あなたはこのように、ベースコントローラクラスを作成することができます。

[CustomAuthentication] 
public class BaseController : Controller 
{ 
} 

15台のコントローラが継承できるもの:

public HomeController : BaseController 

承認を必要としないアクションメソッドのために、あなたは[AllowAnonymous]属性でそれらをマークすることができますので、デフォルトでは、派生コントローラ上のすべてのアクションメソッドは、[Authorize]属性を実行します:

public class HomeController : BaseController 
{ 
    [AllowAnonymous] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
+0

OPは認証の問題のように見えます。 – Colin

+0

私は[[CustomAuthentication]に置き換えられました。 '答えは同じで、一貫性があります。 –

関連する問題