2012-06-03 2 views
0

하는 ASP.NET MVC3 액션 메소드 내부에서 IIS로 제어를 다시 반환 :이 메소드를 호출하는 URL의나는 즉시 축소판을 생성이 작업 방법이

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

? 사용자가 URL을 방문 할 때 파일 다운로드 프롬프트를 보길 원하십니까? –

+0

'FileResult'를 반환하는 대신 IIS가 파일을 제공하길 원합니다. 그건 분명해 보인다. –

답변

1

파일 시스템에 축소판이 작성된 경우, 다음 조치 결과 유형 중 하나를 사용하여이를 리턴 할 수 있습니다. 출력 캐싱에 관한 관련성 대답에 내 대답을 업데이트

FileContentResult 
FilePathResult 
FileStreamResult 

..edit .. .

당신은 아마 Asp.net

Ouput Caching 기사 기본적으로

에서 살펴 봐야 할 것입니다 전제 액션이 MVC에서 호출 할 때마다 그것이 큰 성과가 될 것이다, 다시 전체 기능을 실행하는 것입니다 미리보기 이미지처럼 간단합니다. 대신 OutputCache로 작업을 꾸미면 캐시 타이머를 설정하고 성능을 향상시킬 수 있습니다.

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

VaryByParam documentation

정확히 썸네일을 제공하기 위해 다시 IIS로 제어를 반환하여 무슨 소리
+0

IIS가 파일을 제공하도록하면 몇 가지 장점이 있습니다. 그 중 하나는 응답에 적절하고 효율적인 캐싱 헤더를 설정한다는 것입니다. 위에서 언급 한 조치 결과 중 어느 것도 해결책이 아닙니다. 그것들은 응답을 만들고 모든 것을 처리하는 MVC 처리입니다. –

+0

은 내 대답을 더 적절한 응답으로 편집했습니다 –

+0

감사합니다.하지만 'OutputCache'는 ** RAM **에 작업 결과 사본 만 보유하고 있습니다. 즉, 브라우저가 요청을 보낼 때마다 매개 변수에 의해 변경되지 않는 한 동일한 결과를 제공합니다. 적절한 캐시 헤더는 브라우저가 처음부터 요청을 보내지 못하도록하거나 단순히 무언가를 보내고 본문없이 간단한 304 응답 헤더를 얻지 못하도록합니다. –

관련 문제