MVC提供音频文件,同时阻止使用HttpResponseBase进行直接链接

时间:2011-01-02 16:42:06

标签: asp.net-mvc security file audio-streaming

我需要能够将音频文件提供给mvc应用,同时防止直接访问。理想情况下,页面将使用播放器控件进行渲染,以便用户可以启动/停止链接到数据库记录的音频(音频文件位于不是数据库的文件夹中)。我有这样的控制器动作:

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

并且视图使用RenderAction方法

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

这可以工作,但它不会在现有视图上显示内联,它只打开一个带有媒体控件的新页面。我是否完全咆哮错误的树或有没有办法在现有视图中嵌入响应?完全按照我的意愿工作,但我无法控制对文件的访问。

1 个答案:

答案 0 :(得分:4)

你的控制器动作看起来很奇怪,人们会说经典的WebForms代码,而不是ASP.NET MVC。通常控制器操作返回ActionResult

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

只要将播放器嵌入浏览器内嵌,您就可以查看<object>标记并将网址指向此控制器操作(不要使用Html.RenderAction)。这里使用object代码another example

就防止直接访问而言,这是不可能的,音乐文件在客户端上播放,如果您阻止访问它,您将无法播放它。这与尝试隐藏您网站的HTML一样。这简直是​​不应该做的事情。另一方面,您只允许经过身份验证的用户通过使用[Authorize]属性进行装饰来访问此控制器操作。