我需要能够将音频文件提供给mvc应用,同时防止直接访问。理想情况下,页面将使用播放器控件进行渲染,以便用户可以启动/停止链接到数据库记录的音频(音频文件位于不是数据库的文件夹中)。我有这样的控制器动作:
Response.Clear();
Response.ContentType = "audio/wav";
Response.TransmitFile(audioFilename);
Response.End();
return Response;
并且视图使用RenderAction方法
<% Html.RenderAction("ServeAudioFile"); %>
这可以工作,但它不会在现有视图上显示内联,它只打开一个带有媒体控件的新页面。我是否完全咆哮错误的树或有没有办法在现有视图中嵌入响应?完全按照我的意愿工作,但我无法控制对文件的访问。
答案 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]
属性进行装饰来访问此控制器操作。