У меня есть действие, которое возвращает либо FileContentResult, либо NotModifiedResult, который является пользовательским типом результата, который возвращает HTTP 304, чтобы указать, что запрошенный ресурс не был изменен, например:
[ReplaceMissingPicture(Picture = "~/Content/Images/nothumbnail.png", MimeType = "image/png")]
public ActionResult Thumbnail(int id)
{
var item = Service.GetItem(id);
var requestTag = Request.Headers["If-None-Match"] ?? string.Empty;
var tag = Convert.ToBase64String(item.Version.ToArray());
if (tag == requestTag)
{
return new NotModifiedResult();
}
if (item.Thumbnail != null)
{
var thumbnail = item.Thumbnail.ToArray();
var mime = item.PictureMime;
Response.AppendHeader("ETag", tag);
return File(thumbnail, mime);
}
else
{
return null;
}
}
Для этого действия необходим доступ к объекту Response, который, конечно же, отсутствует во время тестирования, поэтому это действие невозможно проверить. Я мог бы добавить условные операторы вокруг него, чтобы он выполнялся во время тестирования, но затем я не могу проверить правильность установки заголовков.
Что бы решить эту проблему?
К вашему сведению, фильтр ReplaceMissingPicture возвращает конкретный ресурс в случае, если в результате этого действия был возвращен ноль, чтобы не вызвать вызов MapPath () из контроллера по той же причине.