2011-01-02 4 views
0

직접 액세스를 방지하면서 mvc 앱에 오디오 파일을 제공 할 수 있어야합니다. 사용자가 데이터베이스 레코드에 연결된 오디오를 시작/중지 할 수 있도록 (오디오 파일은 db가 아닌 폴더에 있음) 페이지가 플레이어 컨트롤로 렌더링되는 것이 이상적입니다. 나는이 같은 컨트롤러 액션이 있습니다MVC HttpResponseBase를 사용하여 직접 링크를 방지하면서 오디오 파일 제공

 Response.Clear(); 
     Response.ContentType = "audio/wav"; 
     Response.TransmitFile(audioFilename); 
     Response.End(); 
     return Response; 

및보기가

<% Html.RenderAction("ServeAudioFile"); %> 

이가 일하는 RenderAction 방법을 사용하지만 기존 뷰에 인라인으로 표시되지 않습니다, 그것은 단지로 새 페이지를 엽니 다 미디어 컨트롤. 나는 완전히 잘못된 나무를 짖고 있습니까, 아니면 기존의 견해에 응답을 묻는 방법이 있습니까? 정확히 내가 원하는대로 작동하지만 파일에 대한 액세스를 제어 할 수 없습니다.

답변

3

컨트롤러 동작이 매우 이상하게 보입니다. ASP.NET MVC가 아닌 클래식 WebForms 코드라고 할 수 있습니다. 일반적으로 컨트롤러 조치는 ActionResult를 반환 :

public ActionResult ServeAudioFile() 
{ 
    Response.AppendHeader("Content-Disposition", "inline; filename=music.wav"); 
    return File(audioFilename, "audio/wav"); 
} 

마찬가지로 지금까지 브라우저 내에서 인라인 플레이어를 내장 당신은 <object> 태그를 살펴보고,이 컨트롤러 액션에 URL을 (Html.RenderAction를 사용하지 않는) 가리킬 수 있습니다. 그리고 여기 object 태그를 사용하는 another example이 있습니다.

직접 액세스를 방지하는 것이 가능하지 않다면 음악 파일이 클라이언트에서 재생되고 액세스를 차단하면 음악 파일을 재생할 수 없습니다. 사이트의 HTML을 숨기는 것과 같습니다. 이것은 단순히 이루어져서는 안되는 것입니다. 반면에 인증 된 사용자 만 [Authorize] 속성으로 꾸미면이 컨트롤러 작업에 액세스 할 수 있습니다.

+0

감사합니다. 내가하고있는 일을 조금 실마리가 있다고 말할 수 있듯이, 어쩌면 더 좋아질 것입니다. 좋은 참고로, 동작이있는 URL을 가리키는 개체가 작동 할 수도 있다고 생각했습니다. 그래서 나는 당신의 액션을 당신의 액션으로 대체하고 을 넣습니다.하지만 뷰에는 전혀 나타나지 않습니다. –

+1

시도하십시오 :'"type = "audio/wav">'. –

+0

예! "type = "audio/wav"> 은 완벽하게 작동합니다. 매우 감사합니다!!! –

관련 문제