Httphandler返回一个数组

时间:2010-11-26 05:38:33

标签: c# asp.net httphandler

.net中的httphandler可以返回一个值吗?如果是的话怎么样?

谢谢,

Subrat

2 个答案:

答案 0 :(得分:2)

IHttpHandler接口只实现两件事:

Boolean IsReusable {get;}

void ProcessRequest(HttpContext context);

所以没有......在最严格的意义上说,它并不意味着返回一个值。现在,您可以根据需要调整response的形状(SOAP / XML / JSON)。所以实际上,只要HTTP能够支持它,您就可以返回您心中所需的任何内容,而消费它的客户端知道如何处理它。

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

答案 1 :(得分: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在客户端反序列化它们。