MVC会员问题

时间:2011-04-14 09:52:58

标签: asp.net-mvc nullreferenceexception membershipuser

几乎每次我运行我的MVC应用程序时,它都会在到达主页之前因错误而停止。

更新:这是最新的代码:

public class RequireLoggedIn : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (Membership.GetUser() == null)
            {
                filterContext.Result = new RedirectResult("~/Logon");
            }
        }
    }

    public ActionResult Index()
    {
        MembershipUser myObject = Membership.GetUser();
        Guid UserID = (Guid)myObject.ProviderUserKey;

        DateTime dateTime = new DateTime();
        dateTime = DateTime.Now.AddDays(14);

        var model = db.Task.Where(n => (n.UserId == UserID) && (n.Completed == false) && (n.Due < dateTime));
        return View(model);

    }

为什么这样做?它过去运作良好。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我会添加一个属性来检查用户是否已登录此示例。您根本不希望该操作可供非经过身份验证的用户使用,因此您无需在操作本身中管理此操作。您可以使用Authorize执行此操作,而不是以您使用它的形式。

也可以查看这个问题:Is the Authorize attribute in ASP .NET MVC used for Authentication as well as Authorization?

如果您想创建我建议的自定义属性,请创建一个新的 ActionFilterAttribute

public class RequireLoggedIn : ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext) {
      if (Membership.GetUser() == null) {
        filterContext.Result = new RedirectResult("~/Logon");
       }
  }
}

然后,您可以在整个应用程序中使用此装饰任何操作。简单:)

答案 1 :(得分:0)

根据msdn Membership.GetUser()如果您没有任何人登录则会抛出异常。

http://msdn.microsoft.com/en-us/library/fcxcb339.aspx