私は、int
値を取得HttpContext.Session
してすべての継承コントローラーで使用できるようにすることを唯一の目的とするベースコントローラーを持っています。
上記の値が設定されておらず、ユーザーがログインせずに制限されたビューにアクセスしようとしたときに、ログインビューにリダイレクトしようとしています。
これは私がこれまでに得たものです:
public class BaseController : Controller
{
protected int? BranchId
{
get { return (HttpContext.Session.GetInt32("BranchId") as int?); }
set {}
}
public BaseController() {}
}
public class RedirectingActionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (BranchId < 1) // BUT BranchId DOES NOT EXIST IN THIS CONTEXT
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Login"
}));
}
}
}
public class EmployeesController : BaseController
{
private readonly VaktlisteContext db;
private readonly IMapper auto;
public EmployeesController(VaktlisteContext context, IMapper mapper)
{
db = context;
auto = mapper;
}
[RedirectingAction]
public async Task<IActionResult> Index()
{
Branch branch = await db.Branches.Include(e => e.Employees)
.Where(b => b.Id == BranchId).FirstOrDefaultAsync();
if (branch == null) return NotFound();
BranchViewModel vm = auto.Map<BranchViewModel>(branch);
return View(vm);
}
}
私はこの質問と回答を読みましたが、私の場合、解決策をどのように適用できるかを理解できませんでした。
助言がありますか?
クラスのメンバーであるためBranchId
、RedirectingActionAttribute
クラスの属性に直接アクセスすることはできませんBaseController
。このコードを試してください:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if ((filterContext.Controller as BaseController).BranchId < 1)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new
{
controller = "Home",
action = "Login"
}));
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加