将UmbracoContext.Current的值变为null

问题描述 投票:3回答:1

我在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而无需登录时,他应该重定向到登录页面。

提前致谢 :)

asp.net-mvc asp.net-mvc-4 umbraco umbraco7 umbraco6
1个回答
0
投票

如果你的UmbracoContext.Current为null,你可以尝试这个,即使它看起来很奇怪。可能SurfaceController不需要非null的UmbracoContext。也许你应该重定向到RenderMvcController

 UmbracoContext.EnsureContext(new HttpContextWrapper(HttpContext.Current), 
                              ApplicationContext.Current,  true);  
© www.soinside.com 2019 - 2024. All rights reserved.