Я новичок в разработке 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 сейчас не работает из-за этой ошибки.
Возможно, эта ссылка будет вам полезна. stackoverflow.com/questions/8725255/…
@Saadi, Спасибо за ответы. Пожалуйста, обратите внимание, что у меня есть доступ администратора к приложению, и я могу получить доступ к системе, и большинство страниц / функций работают хорошо, кроме этой. Кроме того, по предоставленной вами ссылке обсуждается альтернативный доступ к отображению, которого у меня нет в системе.
Проверьте следующее:
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;
}
Спасибо за ответ. Вопрос: в моем окружении нет (AAM). URL-адрес приложения похож на ps2013: 28312 / workapp, поэтому следует ли мне настроить AAM, изменив общедоступный URL-адрес на что-то еще?
вы можете настроить AAM с локальным IP-адресом
Не могли бы вы поделиться со мной справкой, показывающей, как настроить AAM с локальным IP-адресом?
вам необходимо пройти аутентификацию для доступа к объекту SPContext.Current.