У меня есть база данных, в которой хранятся изображения, к которым можно получить доступ с помощью идентификатора первичного ключа (я знаю, что это не так).
У меня есть довольно стандартный Asp .net Mvc Controller, который читает базу данных и, если в базе данных найдена строка, возвращает байты изображения в виде FileResult. Если строка не найдена, у меня есть результат пользовательского действия, который устанавливает статус ответа 404. Я не выкидываю исключение, а вместо этого позволяю IIS обрабатывать статус 404 и возвращать статический файл.
public class ContentMediaNotFoundResult : ActionResult
{
public ContentMediaNotFoundResult() { }
public override void ExecuteResult(ControllerContext context)
{
//-- Here the only thing we are doing is setting the Response code to 404 and then we are going to let IIS service the request
//-- based on the settings in system.webServer/httpErrors (which may come from the root .config, so be careful)
context.HttpContext.Response.StatusCode = 404;
}
}
Недавно мы тестировали Firefox v3.6.1 и заметили, что браузер делает несколько запросов (3, если быть точным) для каждого изображения, поэтому наша фабрика контроллеров подвергалась 3 ударам и 3 раза обращалась к базе данных из нашего метод действия. Такое поведение только радует Firefox (IE, chrome были нормальными).
У меня вопрос: имеет ли смысл добавлять заголовки кэша Http к 404 ответам в моем ContentMediaNotFoundResult, чтобы мой метод действия не попадал в базу данных постоянно.