0

几乎每次我运行我的 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);

    }

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

任何帮助深表感谢。

4

2 回答 2

0

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

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

于 2011-04-15T15:04:22.610 回答
0

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

也看看这个问题:ASP .NET MVC 中的 Authorize 属性是否用于身份验证和授权?

如果你想创建一个我推荐的自定义属性,那么创建一个新的ActionFilterAttribute

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

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

于 2011-04-14T10:56:04.877 回答