自动为每个请求加载模型

时间:2016-07-25 14:59:42

标签: asp.net asp.net-mvc model asp.net-mvc-5

注意:不确定以下是否是正确的做法。

背景:我有一个论坛(php),我正在创建一个独立于论坛的asp.net MVC Web应用程序,除了登录数据。用户通过论坛注册和登录,但应用程序需要通过从cookie中读取会话哈希并将其与论坛的登录用户数据库进行比较来检查登录状态。

目标:我要在每个请求中包含我的UserModel类,以查看用户是否具有执行其请求执行操作的特定权限。同样为我的视图显示用户相关数据。

我是否需要手动将类似内容添加到我的应用程序中的每个控制器操作中?

    public ActionResult Index()
    {
        UserRepository userRep = new UserRepository();
        UserModel user = userRep.GetUserBySession(Request.Cookies["userHash"].Value);

        //do stuff with user 
        ...

        return View(myViewModel);
    }

1 个答案:

答案 0 :(得分:0)

看看ValidationAttribute。您可以自己动手,并在其中拥有自己的自定义逻辑:

public class CustomAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        UserRepository userRep = new UserRepository();
        UserModel user = userRep.GetUserBySession(Request.Cookies["userHash"].Value);

        if (user == null) { 
            // Redirect to login?
        }
    }
}

然后你可以像这样装饰你的方法:

[CustomAttribute]
public ActionResult Index()

或者,如果您需要将它应用于类中的每个HTTP方法,您可以在类级别进行装饰:

[CustomAttribute]
public class MyClass