Httphandler возвращает массив - PullRequest
       9

Httphandler возвращает массив

1 голос
/ 26 ноября 2010

Может ли httphandler в .net вернуть значение?Если да, то как?

Спасибо,

Субрат

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Интерфейс IHttpHandler реализует только две вещи:

Boolean IsReusable {get;}

void ProcessRequest(HttpContext context);

Так что нет ... в самом строгом смысле это не означает, что нужно возвращать значение. Теперь вы можете настроить свой ответ так, чтобы он выглядел так, как вы хотите (SOAP / XML / JSON). Таким образом, вы можете вернуть все, что душе угодно, если HTTP поддерживает его, а клиент, который его использует, знает, как с этим справиться.

Тем не менее, не рекомендуется пытаться реализовать свои собственные сервисы с помощью HttpHandler, поскольку существуют более простые и эффективные способы для достижения того же самого.

1 голос
/ 26 ноября 2010

HttpHandler отвечает методом ProcessRequest(HttpContext context), в котором вы можете изменить параметр context, чтобы указать, что вы хотите отправить обратно в качестве ответа. context.Response.ContentType указывает MIME-тип ответа, например, ответ - text/html, поэтому браузер отобразит его на html-странице. Или ответ - video/mp4, браузер попытается открыть его, и в большинстве случаев браузер покажет диалог загрузки. К сожалению, нет text/array в типе MIME (и я думаю, что не будет в будущем). Но вы можете передать значение массива в виде простого текста в специальных форматах и ​​десериализовать его на стороне клиента. Вот простой пример:

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.

...