前提・実現したいこと
ASP.NetでAPIの開発をしているのですが、APIのURLをChromeで直に追ったときとアプリで
たたいた時で挙動が違うのを合わせたい。
アプリでHttpWebRequestからWebRequestを打つとダウンロードされるようにしたい。
発生している問題・エラーメッセージ
https://localhost:xxxxxx/api/download/0000/11/test 上記のリンクにAPIが起動しているとして 1.ChromeでURLをコピペして移動するとファイルがダウンロードされるが 2.アプリでHttpWebRequestからWebRequestを打つとダウンロードされない
該当のソースコード
C#
1 public class DownloadController : ApiController 2 { 3 public IHttpActionResult GetDownload(string id, string subid, string name) 4 { 5 var test = new CreateProduction(); 6 test.CreateFolders(id, subid, name); 7 var rslt = System.IO.File.ReadAllBytes(test.CreatePath + ".zip"); 8 test.DeleteFolders(); 9 10 HttpResponse Response = HttpContext.Current.Response; 11 Response.Clear(); 12 Response.ContentType = "application/zip"; 13 Response.HeaderEncoding = System.Text.Encoding.UTF8; 14 Response.ContentEncoding = System.Text.Encoding.UTF8; 15 Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode($"{id}-{subid}_{name}.zip")); 16 Response.BinaryWrite(rslt); 17 18 return Ok(); 19 } 20 }
protected void Download_Click(object sender, EventArgs e) { HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("https://localhost:xxxxx/api/download/0000/11/test"); HttpWebResponse Res = (HttpWebResponse)Req.GetResponse(); }
試したこと
Download_Click側にResponse.BinaryWrite(rslt);の処理を移したところダウンロードできました
なのでrsltのbyte配列をRequestの応答として返してDownload_Click側で処理しようととしたのですが
受け取り手で配列がおかしくなってしまうのでだめでした
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー