Я использую обработчики неправильно? - PullRequest
1 голос
/ 14 марта 2010

Я никогда раньше не использовал HTTP-обработчики, и у меня один работает, но я не уверен, правильно ли я его использую. Я сгенерировал строку, которая будет сохранена в виде файла CSV. Когда пользователь нажимает кнопку, я хочу, чтобы окно download dialog открылось, чтобы пользователь мог сохранить файл. То, что у меня есть, работает, но я продолжаю читать об изменении файла web.config, и мне не пришлось этого делать.

Мой обработчик:

private string _data;
private string _title = "temp";


public void AddData(string data)
{
    _data = data;
}



public bool IsReusable
{
    get { return false; }
}

public void ProcessRequest(HttpContext context)
{

    context.Response.ContentType = "text/csv";
    context.Response.AddHeader("content-disposition","filename=" + _title + ".csv");
    context.Response.Write(_data);
    context.Response.Flush();
    context.Response.Close();

}

И это со страницы, которая позволяет пользователю скачать: (при нажатии кнопки)

string dataToConvert = "MYCSVDATA....";

csvHandler handler = new csvHandler();
handler.AddData(dataToConvert);

handler.ProcessRequest(this.Context);

Это прекрасно работает, но ни одного примера, который я видел, никогда не создавался экземпляр обработчика, и, похоже, он всегда изменяет web.config. Я делаю что-то неправильно?

Спасибо

1 Ответ

4 голосов
/ 14 марта 2010

Мне кажется, что он на самом деле не использует тот факт, что это вообще обработчик. Какая польза от создания отдельного класса для реализации интерфейса, который вы на самом деле не используете, а не для помещения кода в существующий класс страницы? Вы делаете что-то только для ответа - так почему бы просто не сделать это на странице?

Типичный подход к изменению web.config заключается в том, что вы хотите, чтобы обработчик действительно обрабатывал запрос - тогда как в вашем случае страница получает запрос и просто запрашивает объект, который происходит для реализации интерфейс обработчика для выгрузки данных в ответ.

В частности, будет ли этот обработчик использоваться вообще как отдельный обработчик для нормального ответа? Такое чувство, что он сделает что-то полезное только тогда, когда вы позвоните AddData на него ... если вы сделали зарегистрируете его в web.config, он просто ответит пустым файлом CSV (или возможно исключение), верно? Если это так, то я действительно не думаю, что он должен реализовывать IHttpHandler в первую очередь - это введет в заблуждение других разработчиков, которые посмотрят на него позже.

...