Я думаю, что решение вашей проблемы - это сочетание того, что люди упоминали здесь. Override Initialize и загрузите ваш XML-документ туда. Свойство Server должно быть действительным на этом этапе. Также используйте Server.MapPath для извлечения ресурса из иерархии каталогов вашего веб-сайта.
using System.Web.Mvc;
using Site1.Models;
namespace Site1.Controllers
{
[SkyArts.Models.Master]
public abstract class BaseController : Controller
{
protected override void Initialize(RequestContext rc)
{
base.Initialize(rc);
XDocument buttonsXmlDoc = XDocument.Load(
Server.MapPath("~/Content/Xml/Buttons.xml"));
}
}
}
Кроме того, обратите внимание, что при вызове Server.MapPath используйте корневой путь приложения к ресурсу (т. Е. Начинайте путь с символа тильды "~") - по этой причине вы видите ошибку Could не найдена часть пути 'c: \ windows \ system32 \ inetsrv \ Content \ Xml \ Buttons.xml'.
Если вы не используете Server.MapPath, любые относительные пути файловой системы относятся к исполняемому процессу, который в этом случае будет IIS. Вызов Server.MapPath преобразует указанный вами ресурс относительно иерархии виртуальных каталогов вашего веб-сайта в путь физической файловой системы.
Что касается вашей дополнительной проблемы с расположением XML-файла, я бы порекомендовал использовать App_Data, поскольку файлы, хранящиеся в этой папке, не обрабатываются по запросу.