我尝试播放mp3文件,该文件由ContentController的MyAudio方法返回,通过html5音频标签。以下代码:
[Authorize]
public class ContentController : Controller
{
private ContentServices Content { get; set; }
protected override void Initialize(RequestContext requestContext)
{
if (requestContext.HttpContext.User.Identity.isAuthenticated)
{
base.Initialize(requestContext);
}
}
public ActionResult MyAudio(string name)
{
var file = Server.MapPath("~/" + name);
return File(file, "audio/mp3");
}
常见的html代码
当用户获得授权时,所有功能都可以在Chrome中使用。但是当我在Safari中测试它时,有一个奇怪的谜。 HttpContext.User.Identity.isAuthenticated返回false,当然代码不会进一步执行。
有趣的是,当我使用例如@ Html.Action或@ Html.RouteLink时,HttpContext.User.Identity.isAuthenticated将返回true。
我曾尝试使用javascript和jquery来解决问题,但我在Safari也遇到了奇怪的事情。
<script type="text/javascript">
function getAudio() {
if (audio.src == "" || audio.src == null) {
// (1) audio.src = '@Url.Content("~/Content/MyAudio")' + "hello.mp3";
// (2) audio.src = '@Url.Action("MyAudio", "Content", new { name = "hello.mp3" } )';
/* (3) $.get('@Url.Content("~/Content/MyAudio")', {"name": "hello.mp3"},
function(data) {
alert("hello");
});
*/
audio.load();
audio.play();
}
}
</script>
(1)和(2)都有同样的问题。但是当我使用(3)时,HttpContext.User.Identity.isAuthenticated在Safary返回true。但我想你不能通过jquery提供文件流。
有没有人知道我该怎么办才能解决这个问题?
PS我使用ASP.NET开发服务器和Safari 5.1.7 Win32 7。