2012-06-03 72 views
0

我有在飛行中產生縮略圖這個動作方法內返回回控制IIS:從ASP.NET MVC3操作方法

public ActionResult Thumbnail(int imageId, int width, int height) 
    { 
     Image image = ImageManager.GetImage(imageId); 
     string thumbnailPath; 
     if (image.HasThumbnail(width, height)) 
     { 
      thumbnailPath = image.GetThumbnailPath(width, height); 
     } 
     else 
     { 
      thumbnailPath = image.CreateThumbnail(width, height); 
     } 
     /* 
     Here, I've done the business of thumbnail creation, 
     now since it's only a static resource, I want to let IIS serve it. 
     What should I do? Using HttpContext.RewritePaht() doesn't work, as 
     I have to return an ActionResult here. 
     */ 
     return File(image.GetThumbnailPath(width, height), image.MimeType); 
    } 

而且和例子調用該方法的網址是:

/create-thumbnail/300x200/for-image/34 

但是,在用這種方法做縮略圖創建業務後,我想讓IIS服務縮略圖。我該怎麼辦?我怎樣才能將控制權還給IIS?

+0

究竟你將控制權返回給IIS服務的縮略圖是什麼意思?您希望用戶在訪問網址時看到文件下載提示? –

+0

我希望IIS服務於該文件,而不是我返回一個'FileResult'。這似乎很清楚。 –

回答

1

如果在文件系統上創建了縮略圖,則可嘗試使用以下某個操作結果類型來返回它。

FileContentResult 
FilePathResult 
FileStreamResult 

..edit .. 更新我有關於輸出緩存更相關的應答響應。

你可能會想看看在Asp.net

Ouput Caching文章

基本前提是,每一個動作就是所謂的MVC時間再次執行整體功能,這將是一個巨大的性能擊中縮略圖等簡單的東西。相反,如果您使用OutputCache修飾動作,則可以設置緩存計時器並提高性能。

[OutputCache(Duration = int.MaxValue, VaryByParam = "id;param1;param2")] 

VaryByParam documentation

+0

讓IIS爲文件服務,有一些優點,其中之一是它在響應中設置了適當和高效的緩存標頭。上述行動結果都不是解決方案。他們都是MVC處理,創建響應並做所有事情。 –

+0

編輯我的答案與更相關的迴應 –

+0

感謝您的幫助,但'OutputCache'只在您的** RAM **中包含您的行動結果的副本。這意味着每次瀏覽器發送給你一個請求時,你只需要給它一樣的東西(除非參數不同)。適當的緩存頭可以防止瀏覽器首先發送任何請求,或者僅僅發送一些內容並獲得一個沒有主體的簡單304響應頭。 –