来自ASHX Handler的AJAX返回类型

时间:2012-08-15 18:13:53

标签: jquery asp.net .net html ajax

我正在编写一个需要与SQL服务器交换一些信息的页面。出于可移植性的原因,并且因为我讨厌编写ASP但是我被告知要在IIS 7服务器上执行此操作,我正在用纯HTML编写页面,这是C#.NET中的通用处理程序(ASHX)来执行服务器 - 副东西,并使用AJAX在它们之间进行通信。我有这种方法使用Response.ContentType = "text/plain";,但我想用一个请求返回几条信息,所以我转向XML或JSON,倾向于XML。

所以,为了返回XML,我改为"text/xml",但是我只是逐字地Response.Write整个XML代码,或者是否有更简洁的.NET内置方法? JSON也有同样的问题。我知道jQuery中有一些特定的方法(甚至只是JavaScript)来解析返回的数据,所以我想知道在.NET中是否有类似的东西要编码。

1 个答案:

答案 0 :(得分:2)

  

但是我只是简单地反复写入整个XML代码,或者是   .NET内置了一种更简洁的方法吗?

您可以使用XmlWriterXDocument甚至XmlSerializer来构建XML,然后将其写入Response.OutputStream

以下是XDocument的示例:

public void ProcessRequest(HttpContext context)
{
    var doc = new XDocument(
        new XElement(
            "messages",
            new XElement(
                "message", 
                new XAttribute("id", "1"), 
                new XAttribute("value", "message 1"), 
            ),
            new XElement(
                "message", 
                new XAttribute("id", "2"), 
                new XAttribute("value", "message 2")
            )
        )
    );
    context.Response.ContentType = "text/xml";
    using (var writer = XmlWriter.Create(context.Response.OutputStream))
    {
        doc.WriteTo(writer);
    }
}
  

JSON的相同问题

您将使用Json序列化程序,例如JavaScriptSerializer,然后将其写入输出流:

public void ProcessRequest(HttpContext context)
{
    var serializer = new JavaScriptSerializer();
    string json = serializer.Serialize(new
    {
        messages = new[]
        {
            new { id = 1, value = "message 1" },
            new { id = 2, value = "message 2" },
        }
    });
    context.Response.ContentType = "application/json";
    context.Response.Write(json);
}

话虽如此,您应该知道ASP.NET MVC或敲门Web API现在是公开此类数据的首选方式,而不是编写通用处理程序。