如何重构控制器中的“用户检查”代码并使其干燥?

时间:2019-06-06 14:09:47

标签: c# asp.net-core

仍然要学习绳索,所以我几乎不懂.Net和C#的基础知识。

在我的许多(但不是全部)控制器中,我使用相同的代码来确定用户是否有效并可以访问页面。

public IActionResult MyPage(string id = null)
{
    if (_currentUser == null) {
        return RedirectToAction("Error", "Home");
    }

    // Either the parameter value or a session variable.
    id = id ?? _currentUser.UserEmployeeNumber; 

    Employee employee = _employeeRepository.GetEmployeeById(id);

    if (employee == null) {
       return RedirectToAction("Error", "Team");
    }

    if (!_userChecks.IsAllowedAccess(_currentUser.UserEmployeeNumber, id)){
        return RedirectToAction("AccessDenied", "Home");
    }

    // Begin actual page functionality

    return View(myPageViewModel);
}

我该如何将其提取出来并使其可重用?最终目标可能类似于:

public IActionResult MyPage(string id = null)
{
    DoUserStuff(id);

    // Page related functionality 

    return View(myPageViewModel);
}

我很困惑这个助手方法可能需要返回重定向或idemployee,因为这些变量将用于控制器的实际用途。

预先感谢您的建议。

1 个答案:

答案 0 :(得分:2)

您要在此处执行的是授权。尝试重构代码的本能很好,但是在这种情况下,您应注意框架为解决此问题提供的便利,并了解如何利用它们。结果不仅是DRYer,而且开始时涉及的代码更少,并且对于其他ASP.NET Core开发人员来说更惯用和熟悉。

这方面的文档相当不错-我按以下顺序建议:

如果您是新手,可以花很多钱,但是投资是值得的。