Для поддержки устаревшего приложения, которое находится в поле, мне нужно, чтобы мое приложение 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
. Так что, если я смогу принудительно передать заголовки в поток, я смогу избежать этой проблемы.