gpt4 book ai didi

asp.net-mvc - 获取 UmbracoContext.Current 的值为 null

转载 作者:行者123 更新时间:2023-12-05 01:20:58 24 4
gpt4 key购买 nike

我的 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指的是产品 Controller 的 Action 。

因此,如果用户登录并单击链接,一切正常。 (意思是说从 UmbracoContext 获取值并渲染相应的页面)

但是当用户在没有登录的情况下点击链接时就会出现问题(从 UmbracoContext 获取值时出错)

所以执行是:

产品 Controller 调用 > ActionExcuteFilter > RedirectToRouteResult > Home Controller >LoginIn Action > UserDetailViewModel > 给出错误(获取 UmbracoContext.Current 为 null)

所以我想做的是,当用户尝试在没有登录的情况下访问页面 ..Product?categoryId=1 时,他应该被重定向到登录页面。

提前致谢:)

最佳答案

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

 UmbracoContext.EnsureContext(new HttpContextWrapper(HttpContext.Current), 
ApplicationContext.Current, true);

关于asp.net-mvc - 获取 UmbracoContext.Current 的值为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com