Вы должны использовать IHttpHandler
для этого - вы можете настроить, какой URL он обрабатывает или с помощью , создавая .ashx файл (очень простой) или путем регистрации их в web.config файле , который является более гибким, но более хитрым, поскольку синтаксис различается между классическим и интегрированным режимом IIS.
Тогда вам понадобится простой класс с одним важным членом - методом ProcessRequest, принимающим только один параметр - HttpContext.
Кроме того, избегайте использования StringBuilder для создания XML. Вместо этого вы можете использовать более безопасные и более гибкие классы linq to xml: использование этого типа-безопасного подхода также облегчает написание way вспомогательных методов для правильной генерации частей дерева xml; и вы можете запросить и преобразовать результаты для загрузки.
void ProcessRequest(HttpContext context) {
var pdc = Enumerable.Range(0,10).Select(
i=>new{PageName="Page"+i,LinkURL="Link"+i});
var xmlString =
new XElement("asx",
new XAttribute("version","3.0"),
new XElement("title","Spilliste"),
pdc.Select(pdcElem=>
new XElement("entry",
new XElement("title",pdcElem.PageName),
new XElement("abstract","Ikke tilgjengelig"),
new XElement("ref",pdcElem.LinkURL)
)
)
).ToString(SaveOptions.DisableFormatting);
//don't forget to handle headers and set things like content-type too!
context.Response.Write(xmlString);
}
Причина, по которой этот подход лучше взлома файла .aspx, заключается в том, что, хотя это возможно в файле .aspx, вам придется бороться с фреймворком, чтобы получить его - целая куча инфраструктуры будет мешать вам, возможно, тонко искажать вывод, прежде чем он достигнет клиента. Самый простой способ избавиться от этого - использовать более простой обработчик, который специально не предназначен для размещения элементов управления aspx и генерации HTML.