1

由于性能问题,我在线程中添加了发布代码。

我的代码是:

public void functionname()
{
----------------
------------
    try
     {
         HttpontextforMailSending gethttpcontextforpublish2 = new HttpontextforMailSending()
             {
                 HttpContextReference = HttpContext.Current,
                 courseDocument = shortCourseDocument,
                 createdUser = new User(0)
             };

         Thread t2 = new Thread(PublishDocument);
         t2.Start(gethttpcontextforpublish2);
      }
      catch { }
-------------
-----------
}

private void PublishDocument(object input)
{
     HttpontextforMailSending httpcontextformail = (HttpontextforMailSending)input;
     Document course = httpcontextformail.courseDocument;
     User createduser = httpcontextformail.createdUser;

     if (course != null && createduser != null)
     {
         course.Publish(createduser);
         umbraco.library.UpdateDocumentCache(course.Id);
     }
}

public class HttpontextforMailSending
{
    public HttpContext HttpContextReference { get; set; }       
    public Document courseDocument { get; set; }
    public User createdUser { get; set; }
}

但我明白了Object reference not set to an instance of an object" error on "course.Publish(createduser);

Umbraco 版本是 4.8.1。

可能是这个错误是由于course.HttpContext. 它具有null价值。

但是,当我将其设置为course.HttpContext = httpcontextformail.HttpContextReference;显示警告时

umbraco.cms.businesslogic.web.document.HttpContext is obsolete. Do not use this. Gethttp上下文via regular ASP.Net methods instead

当我调试这段代码时,我开始HttpContexthttpcontextformail.HttpContextReference.

但执行后 course.HttpContext = httpcontextformail.HttpContextReference;course.HttpContext仍然有空值。

请帮我

谢谢

4

1 回答 1

0

Umbraco 期望在 Web 请求中使用,因此如果在另一个应用程序等中的 Web 请求之外调用,API 将无法工作。

如果您想在外部使用 Umbraco API 执行某些操作,那么您将需要使用Umbraco Base(或类似的),以便 API 具有所需的 HttpContext。

Umbraco Base 是一个类似 REST 的系统,允许通过 Umbraco 上下文中定义的 URL 执行查询或代码。

于 2012-12-20T16:10:42.120 回答