Установка Content-Type для пустого ответа в ASP.NET MVC

Для поддержки устаревшего приложения, которое находится в поле, мне нужно, чтобы мое приложение ASP.NET MVC возвращало пустой ответ, который также имеет a Content-Type . Один из IIS, ASP.NET или ASP.NET MVC удаляет мой Content-Type , когда я отправляю обратно нулевой ответ. Есть ли какой-нибудь способ обойти это?

(Очевидно, что идеальным решением будет отсутствие пустого ответа с набором Content-Type , клиенты уже существуют, и многие из них не могут быть обновлены.)

РЕДАКТИРОВАТЬ : Поскольку был запрос кода: я передаю запрос от нового веб-приложения тому, на которое полагаются старые клиенты на. Для этого у меня есть подкласс ActionResult , называемый LegacyResult , который вы можете просто вернуть для тех методов, которые должны обрабатываться старым программным обеспечением. Это соответствующая часть его кода:

    public override void ExecuteResult(ControllerContext context)
    {
        using (var legacyResponse = GetLegacyResponse(context))
        {
            var clientResponse = context.HttpContext.Response;
            clientResponse.Buffer = false;
            clientResponse.ContentType = legacyResponse.ContentType; /* Yes, I checked that legacyResponse.ContentType is never string.IsNullOrEmpty */
            if (legacyResponse.ContentLength >= 0) clientResponse.AddHeader("Content-Length", legacyResponse.ContentLength.ToString());

            var legacyInput = legacyResponse.GetResponseStream();
            using (var clientOutput = clientResponse.OutputStream)
            {
                var rgb = new byte[32768];
                int cb;
                while ((cb = legacyInput.Read(rgb, 0, rgb.Length)) > 0)
                {
                    clientOutput.Write(rgb, 0, cb);
                }
                clientOutput.Flush();
            }
        }
    }

Если legacyInput имеет данные, то Content-Type устанавливается соответствующим образом. В противном случае это не так. На самом деле я могу заткнуть старый бэкэнд, чтобы отправить пустой v. Непустой ответ для точно такого же запроса, и наблюдать разницу в Fiddler.

РЕДАКТИРОВАТЬ 2 : Возникновение с Reflector показывает, что, если заголовки не были записаны во время вызова HttpResponse.Flush , то Flush записывает сами заголовки. Проблема в том, что он записывает только крошечное подмножество заголовков. Один из отсутствующих - Content-Type . Так что, если я смогу принудительно передать заголовки в поток, я смогу избежать этой проблемы.

5
задан Benjamin Pollack 28 December 2010 в 14:41
поделиться