私はImageResult(ActionResultを拡張)を返すコントローラアクションを持っています。このアクションメソッドが最初にパラメータ値Nで呼び出されると、他の結果的な呼び出しはすべて同じパラメータ値Nを持ち、そのパラメータは異なります。私はこれがASP.NET MVCのパラメータキャッシングに関係していると思います。ASP.NET MVCイメージのパラメータキャッシング
結果として、アクションを呼び出すことによる戻りイメージは、パラメータ値にかかわらず常に同じです。これを回避する方法はありますか?
多分Responseに直接書くことに関連する何か?ここに私のImageResultです:
public class ImageResult : ActionResult
{
public Image Image
{
get; set;
}
public ImageFormat ImageFormat
{
get; set;
}
private static Dictionary FormatMap
{
get; set;
}
static ImageResult()
{
CreateContentTypeMap();
}
public override void ExecuteResult(ControllerContext context)
{
if (Image == null) throw new ArgumentNullException("Image");
if (ImageFormat == null) throw new ArgumentNullException("ImageFormat");
context.HttpContext.Response.Clear();
context.HttpContext.Response.ContentType = FormatMap[ImageFormat];
Image.Save(context.HttpContext.Response.OutputStream, ImageFormat);
}
private static void CreateContentTypeMap()
{
FormatMap = new Dictionary
{
{ ImageFormat.Bmp, "image/bmp" },
{ ImageFormat.Gif, "image/gif" },
{ ImageFormat.Icon, "image/vnd.microsoft.icon" },
{ ImageFormat.Jpeg, "image/Jpeg" },
{ ImageFormat.Png, "image/png" },
{ ImageFormat.Tiff, "image/tiff" },
{ ImageFormat.Wmf, "image/wmf" }
};
}
}
とコントローラのアクション:
public ActionResult GetCalendarBadge(DateTime displayDate)
{
var bmp = SomeBitmap();
var g = Graphics.FromImage(bmp);
//GDI+ to draw the image.
return new ImageResult { Image = bmp, ImageFormat = ImageFormat.Png };
}
とビューコード:
<% foreach(var item in this.Model.News) { %>
<%= Html.Image<NewsController>(o => o.GetCalendarBadge(item.DisplayDate), 75, 75)%>
<% } %>
はまた、これらの2つの回避キャッシュを追加しようとしたが、何も起こらなかっ:
context.HttpContext.Response.Cache.SetNoStore();
context.HttpContext.Response.Expires = 0;
context.HttpContext.Response.AppendHeader("Pragma", "no-cache");
IOW、この質問は、ASP、キャッシング、またはイメージとは関係ありません。 =] – bzlm