2013-09-17 3 views
4

У меня проблема с HttpListener, она работает нормально (включая возврат 404), но если я напишу что-нибудь в выходной поток (чтобы вернуть пользовательский html для 404), то даже если бы я установил код состояния = 404 firebug отображает статус 200 ok, как только я удаляю пользовательский html, он видит 404, как ожидалось.Пользовательский 404 с HttpListener

Как я получаю 404, если я раскомментировать 2 строки комментария я получаю HTML я хочу отображаться, но в 200 в то время как я ожидал 404:

//var buffer = System.Text.Encoding.UTF8.GetBytes("<html><head></head><body><h1>404 not found</h1></body></html>"); 
    //ctx.Response.OutputStream.Write(buffer, 0, buffer.Length); 
    ctx.Response.StatusCode = 404; 

ответ

5

Поскольку протокол HTTP требует, чтобы код состояния отправляться перед контентом, как только вы пишете в выходной поток, для вас автоматически отправляется статус 200, за которым следуют все, что вы пишете в потоке. Если вы попытаетесь установить код состояния после записи в выходной поток, то уже слишком поздно.

+0

Звучит так, будто это было, спасибо! –

+0

вы думаете, что MS могла бы спроектировать интерфейс таким образом, чтобы это стало очевидным. –

Смежные вопросы