我尝试通过 html5 音频标签播放 mp3 文件,该文件由 ContentController 的 MyAudio 方法返回。以下代码:
[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。