実現したいこと
大きな画像など、時間のかかる応答を返すことを前提とし、
RazorページのOnGetでクライアントからの切断を検出して送信を中止したい。
クライアントの切断を検出したら、Response.Body.WriteAsync(buff,0,ret);
で例外が出ることを期待したが、例外は発生せずに最後まで行ってしまう。
なおASP.Net Core であれば、Razorページにこだわりません。
C#
C#
1using System.IO; 2using System.Linq; 3using System.Text; 4using System.Threading.Tasks; 5using Microsoft.AspNetCore.Mvc; 6using Microsoft.AspNetCore.Mvc.RazorPages; 7 8namespace iotsys.Pages 9{ 10 public class ImageModel : PageModel 11 { 12 public string filePath = @"D:\sample.jpg"; 13 public int buffSize = 12*1024; 14 public void OnGet() 15 { 16 byte[] buff = new byte[buffSize]; 17 int len = 0; 18 try{ 19 using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { 20 Response.ContentLength = stream.Length; 21 while(len<stream.Length){ 22 int ret = stream.Read(buff,0,buff.Length); 23 len += ret; 24 Response.Body.WriteAsync(buff,0,ret); 25 } 26 } 27 }catch(Exception ex){ 28 //切断時例外が発生しない 29 Console.WriteLine(ex.ToString()); 30 } 31 } 32 } 33} 34
回答1件
あなたの回答
tips
プレビュー