我正在使用Umbraco CMS。我有以下型号:
public class LoyaltyPromo : RenderModel
{
public LoyaltyPromo(IPublishedContent content)
: base(content)
{
}
//properties removed for brevity
}
我想在UmbracoApiController
中使用此模型。所以我这样做:
public class PromoServiceController : UmbracoApiController
{
public async Task<object> GetAll()
{
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
IPublishedContent content = umbracoHelper.TypedContent(1050);
var list = new List<LoyaltyPromo>();
list.Add(new LoyaltyPromo(content));
return list;
}
}
不幸的是它不起作用,我得到NullReferenceException
:
发生了错误。 你调用的对象是空的。 System.NullReferenceException 在Umbraco.Web.Models.RenderModel..ctor(IPublishedContent 内容)在LoyaltyOps.Models.LoyaltyPromo..ctor(IPublishedContent 内容)在C:\ Users \ mkallingal \ documents \ visual studio中 2015 \ Projects \ LoyaltyOps \ LoyaltyOps.Models \ LoyaltyPromo.cs:第13行at LoyaltyOps.Controllers.PromoServiceController.d__0.MoveNext() 在C:\ Users \ mkallingal \ documents \ visual studio中 2015年\项目\ LoyaltyOps \ LoyaltyOps \ \控制器PromoServiceController.cs:行 32 ---从异常的先前位置开始的堆栈跟踪结束 扔了 - 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Threading.Tasks.TaskHelpersExtensions.d__3`1.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
我该如何解决这个问题?
答案 0 :(得分:4)
您的问题是RenderModel不适合在WebAPI中使用,而WebAPI根本没有关于前端页面的上下文。内部RenderModel依赖于PublishedContentRequest
正确设置的UmbracoContext
属性,这在WebAPI中不会发生。
如果你确实需要在RenderModel上建立模型,那么使用替代构造函数:
RenderModel(IPublishedContent content, CultureInfo culture)
传递文化和内容 - 这将解决PublishedContentRequest
被设置的需要,但你可能会遇到其他问题。
更好的方法是创建一个完全不依赖于RenderModel的视图模型。由于WebAPI通常会将您的模型序列化为JSON,因此您可以将它变得更好。
另一件事 - 您的GetAll()列表根本没有返回 - 我假设您的实际方法中没有进行额外处理,需要您的模型基于{{1}你刚刚返回列表了吗?