2016-10-06 6 views
0

こんにちは、私はあなたからの助けが必要です - ASP.NET MVC。Html5オーディオ - ページを更新してオーディオをリセットできない

私のWebアプリケーションでは、私はhtml5オーディオを持っています。

これは一度動作しますが、ページを更新すると、この動画はブラウザのメモリに保存されます。

ページをリフレッシュすると、初めての場合と同じように、新しいコントローラアクションが発生するはずです。

以下の私のコードを見てください:

マイビュー

 <audio controls style="width: 400px;"> 
      <source src="@Url.Action("StreamUploadedSong")" type="audio/mp3" /> 
      Your browser does not support the audio element. 
     </audio> 

マイコントローラー

 public FileStreamResult StreamUploadedSong() // <--------- Do not enter here the second time. 
     { 
      byte[] teste = null; 
      string query1 = "SELECT * FROM Video WHERE Id= '2'"; 
      using (SqlConnection connection1 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString)) 
      using (SqlCommand command1 = new SqlCommand(query1, connection1)) 
      { 
       connection1.Open(); 
       var reader = command1.ExecuteReader(); 

       if (reader.HasRows) 
       { 
        reader.Read(); 
        teste = (byte[])reader["Voice"]; 
       } 
       connection1.Close(); 
      } 

      long fSize = teste.Length; 
      long startbyte = 0; 
      long endbyte = fSize - 1; 
      int statusCode = 200; 
      if ((Request.Headers["Range"] != null)) 
      { 
       //Get the actual byte range from the range header string, and set the starting byte. 
       string[] range = Request.Headers["Range"].Split(new char[] { '=', '-' }); 
       startbyte = Convert.ToInt64(range[1]); 
       if (range.Length > 2 && range[2] != "") endbyte = Convert.ToInt64(range[2]); 
       //If the start byte is not equal to zero, that means the user is requesting partial content. 
       if (startbyte != 0 || endbyte != fSize - 1 || range.Length > 2 && range[2] == "") 
       { statusCode = 206; }//Set the status code of the response to 206 (Partial Content) and add a content range header.          
      } 
      long desSize = endbyte - startbyte + 1; 
      //Headers 
      Response.StatusCode = statusCode; 

      Response.ContentType = "audio/mp3"; 
      Response.AddHeader("Content-Accept", Response.ContentType); 
      Response.AddHeader("Content-Length", desSize.ToString()); 
      Response.AddHeader("Content-Range", string.Format("bytes {0}-{1}/{2}", startbyte, endbyte, fSize)); 
      //Data 

      var stream = new MemoryStream(teste, (int)startbyte, (int)desSize); 

      return new FileStreamResult(stream, Response.ContentType); 
     } 

再びコントローラのアクションStreamUploadedSongを入力してページを更新する方法任意のアイデア?

答えて

0

解決策が見つかりました!

Guid.NewGuidを使用してGuid構造体の新しいインスタンスを初期化します。

ブルースはこのフォーラムザ・Asp.net MVCについてコメント:

を「ブラウザは、オーディオをキャッシュしますが、それはすべての時間を取得したい場合は、URLは一意である必要があるだけでURLにGUIDを追加します。。。 "

出典:ASP.NET Forums

は交換してください:

<source src="@Url.Action("StreamUploadedSong")" type="audio/mp3" /> 

<source src="@Url.Action("StreamUploadedSong", "Account", new {id = Guid.NewGuid()})" type="audio/mp3" /> 

関連する問題