从多个函数中的嵌套函数返回

时间:2013-09-27 14:25:20

标签: c# asp.net-mvc-4

我有一个设置,我需要在多个函数中执行相同的代码。

[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

1 个答案:

答案 0 :(得分:0)

您应该使用IActionFilter来检查用户是否已登录或使用Cookie需要其他任何内容。如果跨多个控制器具有通用逻辑,则IActionFilter是有意义的(因为您可以使用相同的过滤器注释多个控制器)。

如果您只需要一个控制器中的公共逻辑,那么您可以覆盖在控制器上执行操作之前调用的OnActionExecuting方法。