为什么SPContext.Current返回空值?

时间:2018-05-02 06:00:22

标签: c# sharepoint-2013

我是SharePoint开发的新手,我正在开发自定义SharePoint Farm解决方案。我目前遇到的代码问题是在生产和测试环境中正常运行但是在开发时出错并且我不知道为什么。源代码在所有环境中看起来都相同。我能够通过调试找到错误,我发现它在以下行中出错:

SPWeb web = SPContext.Current.Web;

代码是关于在我的申请中完成课程评估功能后发送电子邮件。这是代码:

MailConfiguration config = new MailConfiguration();
MailNotification content = config.GetMailNotification(userId, courseId);
SPWeb web = SPContext.Current.Web;
string subject = content.Subject;
string msgBody = content.Body;
SPSecurity.RunWithElevatedPrivileges(delegate ()
{
     bool result = SPUtility.SendEmail(web, appendHtmlTag, htmlEncode, content.To, subject, msgBody);
     message = "Email sent successfully";
});

能否请您解释为什么会发生这种情况?由于此错误,SendEmail功能现在无效。

1 个答案:

答案 0 :(得分:0)

检查以下内容:

1.检查备用映射访问(AAM)。如果没有,请配置它。

2.检查SharePoint网站的根目录是否有网站集。

3.使用以下方法在非SharePoint上下文中创建虚假SPContext。

public static SPContext FakeSPContext(SPWeb web)
{
    if (HttpContext.Current == null)
    {
        HttpRequest request = new HttpRequest("", web.Url, "");
        HttpContext.Current = new HttpContext(request, new HttpResponse(TextWriter.Null));
    }

    if (HttpContext.Current.Items["HttpHandlerSPWeb"] == null)
    {
        HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
    }

    return SPContext.Current;
}