2010-11-26 48 views

回答

2

IHttpHandler接口只实现了两件事情:

Boolean IsReusable {get;} 

void ProcessRequest(HttpContext context); 

因此,没有...严格意义上它并不意味着返回值。现在,您可以将response设置为您想要的样式(SOAP/XML/JSON)。所以实际上,只要HTTP能够支持它,你就可以返回任何你想要的东西,并且消费它的客户端知道如何处理它。

但是,尝试通过HttpHandler尝试实施自己的服务是不明智的,因为有simpler and more efficient ways来完成同样的事情。

1

HttpHandler通过其ProcessRequest(HttpContext context)方法响应,您可以在其中修改参数context以告知您希望作为响应发回什么内容。 context.Response.ContentType指定响应的MIME类型,例如响应为text/html,因此浏览器会将其呈现为html页面。或者,响应为video/mp4浏览器将尝试打开它,并且在大多数情况下浏览器将显示下载对话框。不幸的是,在MIME类型中没有text/array(我认为将来不会有)。但是,您可以将数组值以纯文本形式传递给特殊格式,并在客户端反序列化它。下面是一个简单的例子:

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/plain"; 
    context.Response.Write("[1,2,3,4]"); 
} 

,并在JavaScript客户端:

var response = GetTheResponse(); //maybe via ajax or something equivalent. 
var myArray = eval(response); //myArray[0]=1,myArray[1]=2... 

在实际项目中,你可能会想与复杂对象的数组,在它(不只是简单的数字) 。因此,您需要系统化的序列化/反序列化标准,例如,将您的Person对象数组序列化为json字符串并将其写入响应,然后使用某些json utils将它们反序列化回客户端。