Почему SPContext.Current возвращает нулевое значение? - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в разработке SharePoint и занимаюсь разработкой пользовательского решения для фермы SharePoint. В настоящее время у меня есть проблема с кодом, который правильно работает в производственной и тестовой средах, но выдает ошибку при разработке, и я не знаю почему. Исходный код выглядит одинаково во всех средах. Я смог найти ошибку с помощью отладки и обнаружил, что она выдает ошибку в следующей строке:

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 голосов
/ 02 мая 2018

Проверьте следующее:

1. Проверьте доступ к альтернативному отображению (AAM). Если нет, настройте его.

2. Проверьте наличие семейства сайтов в корне сайта SharePoint.

3. Используйте описанный ниже метод для создания поддельного SPContext в контексте вне SharePoint.

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;
}
...