Проблема членства в MVC - PullRequest
0 голосов
/ 14 апреля 2011

Почти каждый раз, когда я запускаю свое приложение 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 голосов
/ 15 апреля 2011

В соответствии с msdn Membership.GetUser () выдает исключение, если никто не вошел в систему.

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

0 голосов
/ 14 апреля 2011

Я бы добавил атрибут, чтобы проверить, что пользователь вошел в систему для этого примера.Вы вообще не хотите, чтобы действие было доступно для неаутентифицированных пользователей, поэтому нет необходимости управлять этим в вашем теле самого действия.Вы можете использовать Authorize, чтобы сделать это, но не в той форме, в которой вы его используете.

Проверьте и этот вопрос: Используется ли атрибут Authorize в ASP .NET MVC для аутентификации и авторизации?

Если вы хотите создать собственный атрибут,который я бы порекомендовал, а затем создайте новый ActionFilterAttribute

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

Затем вы можете украсить любое из ваших Действий этим во всем приложении.Simples:)

...