我需要在ASPX页面上输出XML / ASX。 XML是从后面的代码生成的,将look like this。
我正在使用字符串构建器来创建XML / ASX。
(...)
sb.AppendLine("<asx version='3.0'>");
sb.AppendLine("<title> Spilliste </title>");
while (i < pdc.Count)
{
sb.AppendLine("<entry>");
sb.AppendLine("<title>" + pdc[i].PageName + "</title>");
sb.AppendLine("<abstract> Ikke tilgjengelig</abstract>");
sb.AppendLine("<ref>" + pdc[i].LinkURL + "</ref>");
sb.AppendLine("</entry>");
i++;
}
sb.AppendLine("</asx>");
return sb.ToString();
(...)
但我该怎么输出呢?
Response.Write
无法使用代码。我很想在ASPX文件中使用<asp:label>
,因为它需要放在标签中。我基本上有一个空白的ASPX页面。
怎么办?
答案 0 :(得分:4)
请勿使用Page
。基本上Page
用于渲染html。如果您想发送xml或图像或任何其他类型的数据,您应该使用.ashx文件和实现IHttpHandler
的类。
您可以看到有关如何实施界面的this example。
答案 1 :(得分:0)
Response.Write应该来自代码:
Response.Write("some test");
Response.Flush();
但是你应该在Page_Load方法中执行这段代码。
您应该准备单独的aspx页面来生成xml并重定向用户该页面。此页面应为空(在aspx文件中只有<%@ ... %>
)。
答案 2 :(得分:0)
您应该使用IHttpHandler
- 您可以通过making an .ashx file(非常简单)或registering them in the web.config file来配置它处理 的网址,这是更灵活,但由于经典和集成模式IIS之间的语法各种各样棘手。
然后,你需要一个带有一个重要成员的简单类 - 一个只接受一个参数的ProcessRequest方法 - HttpContext。
此外,避免使用StringBuilder来构建XML。你可以使用更安全,更灵活的linq到xml类:使用这种类型安全的方法也使方式更容易编写辅助方法来正确生成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。
答案 3 :(得分:0)
Response.ClearHeaders();
Response.ContentType = "text/xml;charset=UTF-8";
string xmlString = "<aaa>sai</aaa>";
Response.Write(xmlString);
Response.End();