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 を使用しています。