我有一个设置,我需要在多个函数中执行相同的代码。
[HttpGet]
public ActionResult Index()
{
// Check if cookies are disabled, and redirect to login page if so
if (cookiesDisabled(Request))
{
ModelState.AddModelError("cookie", "");
return RedirectToAction("Login");
}
// Get the models
AsdViewModel models = getAVM();
if (models == null)
{
return Logout();
}
// Return view with the models passed in, etc.
}
public ActionResult OtherPage() {
// Do cookie check so that just typing in MySite/Controller/OtherPage won't work
// Get the models
// Do some OtherPage() relevant calculations with the models
// Return view with the models passed in, etc.
}
这里的问题是这段代码中有很多退回。在布尔返回函数中包装cookie检查似乎是多余的,因为我基本上只是保存一行(ModelState.Add...
),并且与获取模型相同,因为我无法从内部函数调用返回所有内容。有没有更好的方法来组织这个,或者我应该如何处理回报呢?
我知道我可以在索引中执行return OtherPage()
之类的操作以跳过重复的代码,但我希望该网址反映用户现在位于OtherPage
。
答案 0 :(得分:0)
您应该使用IActionFilter来检查用户是否已登录或使用Cookie需要其他任何内容。如果跨多个控制器具有通用逻辑,则IActionFilter是有意义的(因为您可以使用相同的过滤器注释多个控制器)。
如果您只需要一个控制器中的公共逻辑,那么您可以覆盖在控制器上执行操作之前调用的OnActionExecuting方法。