2011-01-02 4 views
0

直接アクセスを防ぎながらオーディオファイルをmvcアプリケーションに提供できる必要があります。ユーザーがデータベースレコードにリンクされたオーディオを開始/停止できるように(オーディオファイルはデータベースではなくフォルダにあります)、プレイヤーコントロールでページをレンダリングするのが理想的です。私はこのようなコントローラのアクションがあります。MVC HttpResponseBaseを使用して直接リンクを防止しながらオーディオファイルを処理する

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

を、ビューが、これは動作しますが、それは既存のビューにインラインで表示されません

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

RenderActionメソッドを使用して、それだけで新しいページを開きますメディアコントロール間違ったツリーを完全に吠えているのですか、または既存のビューにレスポンスを埋め込む方法がありますか?私が望むように正確に動作しますが、ファイルへのアクセスを制御することはできません。

答えて

3

コントローラの動作が非常に奇妙に見えます.1つは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"> が完璧です。どうもありがとう!!! –

関連する問題