Получение значения UmbracoContext.Current как null

У меня есть следующий код в моем классе Home Controller/Viewmodel

public class HomeController : SurfaceController {
      ....


  [AllowAnonymous]   
public ActionResult LoginIn()  
 {
    var user = new UserDetail() { FirstName = "FirstName", LastName = "LastName" };
    UserDetailViewModel model = new UserDetailViewModel() { User = user };
    return PartialView("~/Views/Partials/__LoginPartial.cshtml", model);

  }
     ........ 
}

public class UserDetailViewModel : RenderModel
 {    
        public UserDetailViewModel() : this(new UmbracoHelper(UmbracoContext.Current).TypedContent(UmbracoContext.Current.PageId)) { }
        public UserDetailViewModel(IPublishedContent content, CultureInfo culture) : base(content, culture) { }
        public UserDetailViewModel(IPublishedContent content) : base(content) { }
        public UserDetail User { get; set; } 
    }

Далее следует ActionExcuteFilter.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class ActionExcuteFilter : ActionFilterAttribute {
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (HttpContext.Current.Session == null || Convert.ToInt32(HttpContext.Current.Session["UserId"]) ==0)
        {
            var myAccountPage = uQuery.GetNodesByType("Login").FirstOrDefault();

            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary {
                { "action", "LoginIn" },
                { "controller", "Home" }});

        }
        base.OnActionExecuting(filterContext);
    } }

И на главной странице есть следующая ссылка

http://localhost/Products?categoryId=1, которые относятся к действию контроллера продукта.

Итак, если пользователь получает логин и нажимает на ссылку, все работает нормально. (Означает получение значения из UmbracoContext и отображение соответствующих страниц)

Но когда пользователь щелкает ссылку без входа в систему, начинаются проблемы (получается ошибка при извлечении значений из UmbracoContext )

Итак, исполнение:

Контроллер продукта вызывает > ActionExcuteFilter > RedirectToRouteResult > Home Controller > LoginIn Action > UserDetailViewModel > Выдает ошибку (получение UmbracoContext.Current как null)

Итак, что я пытаюсь сделать, так это то, что когда пользователь пытается получить доступ к странице ..Product?categoryId=1 без входа в систему, он должен быть перенаправлен на страницу входа.

Заранее спасибо :)


person BJ Patel    schedule 11.02.2016    source источник
comment
Convert.ToInt32(HttpContext.Current.Session[UserId]) может вызвать исключение, поскольку UserId может быть нулевым   -  person Laurent Lequenne    schedule 05.03.2019


Ответы (1)


Вы можете попробовать это, если ваш UmbracoContext.Current равен нулю, даже если эта ситуация кажется странной. Вероятно, SurfaceController не нуждается в ненулевом UmbracoContext. Возможно, вам следует перенаправить на RenderMvcController

 UmbracoContext.EnsureContext(new HttpContextWrapper(HttpContext.Current), 
                              ApplicationContext.Current,  true);  
person Laurent Lequenne    schedule 05.03.2019