1

我尝试通过 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。

4

0 回答 0