私はすべてのコントローラーにこの反復コードを持っています:
var user = Session["_User"] as User;
if (user== null)
{
return RedirectToAction("Index");
}
これをリファクタリングするにはどうすればよいですか?これを属性に追加するか、セッションラッパーを作成する必要がありますか?
最善のアプローチは何でしょうか?
私はすべてのコントローラーにこの反復コードを持っています:
var user = Session["_User"] as User;
if (user== null)
{
return RedirectToAction("Index");
}
これをリファクタリングするにはどうすればよいですか?これを属性に追加するか、セッションラッパーを作成する必要がありますか?
最善のアプローチは何でしょうか?
すべてのコントローラーをMasterControllerで拡張し、OnActionExecutingメソッドを次のようにオーバーライドします
public class MasterController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = Session["_User"] as User;
if (user== null)
{
if(filterContext.ActionDescriptor.ActionName != "Index" || filterContext.ActionDescriptor.ControllerDescriptor.ControllerName != "ControllerThatContainIndexAction")
{
filterContext.Result = this.RedirectToAction("Index");
return;
}
}
base.OnActionExecuting(filterContext);
}
}
多くの方法があります。独自のコントローラーを作成します。これから他のコントローラーを継承するより。
public class BaseController : Controller
{
public User User { get; private set; }
public BaseController()
{
this.User = Session["_User"] as User;
}
}
public class HomeController: BaseController
{
// your action methods
}