WebAPIはファイルのダウンロードリンクを返します

1515 ワード

インタフェースを介してSDEから一時的なMDBにデータをダウンロードし、フロントエンドのhttpダウンロードリンクに戻り、フロントエンドがこのリンクからMDBファイルを取得できるようにする必要がある.そこで、Webサイトのルートディレクトリ(App_Data、web.configと同級ディレクトリ)にTempDataディレクトリを作成し、ダウンロード後の一時MDBファイルを保存し、呼び出し要求を解析することでIPとポートを取得し、そのパスとダウンロードリンクをつなぎ合わせます.
コードは次のとおりです.
        /// 
        ///   :    
        /// 
        /// 
        [HttpGet]
        [ResponseType(typeof(string))]
        public IHttpActionResult Parse()
        {
            var sPath = @"E:\Code\MyTest\WebApplication2\WebApplication2\TempData\abc.mdb";
            //var sPath = @"~\TempData\abc.doc";

            if (sPath.IndexOf("~") == 0)
                sPath = HostingEnvironment.MapPath(sPath); //      
            //           
            var sRootePath = HostingEnvironment.MapPath(HostingEnvironment.ApplicationVirtualPath);
            //            ( :TempData/abc.mdb)
            var sRelativeUri = new Uri(sRootePath, UriKind.Absolute).MakeRelativeUri(new Uri(sPath, UriKind.Absolute)).ToString();
            //            ,                  
            var sResult = (0 == string.Compare(Path.GetFullPath(sRelativeUri), Path.GetFullPath(sPath), StringComparison.OrdinalIgnoreCase))
                ? null : $"http://{HttpContext.Current.Request.Url.Authority}/{sRelativeUri}"; //      
            return Json(sResult);
        }

呼び出し時に返される結果は次のとおりです.
"http://localhost:6730/TempData/abc.mdb"