1

ContentController から MyAudio メソッドで返された mp3 ファイルを、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) を使用すると、Safary で HttpContext.User.Identity.isAuthenticated が true を返します。しかし、jquery を介してファイル ストリームを提供することはできないと思います。

何が起こっているのか、どうすれば問題を解決できるのか、誰かが考えていますか?

PS 私は ASP.NET 開発サーバーと Safari 5.1.7 Win32 7 を使用しています。

4

0 に答える 0