使用Web API调用下载文件

时间:2013-07-25 21:20:19

标签: c#-4.0 asp.net-web-api asp.net-4.0

我正在使用Web API下载文件。首先让我先说这对我来说是一个新的领域。如果我直接进入API的主页,我在Web API代码中的下载功能将启动下载。但是,使用来自我的其他网页的Web API调用的响应,我不知道如何检索文件。我看到很多类似的问题,但没有一个确实有明确的答案。

这是我将代码发送回调用者的代码:

    public HttpResponseMessage GetDownloadFile(string uid, string fileID, string IP_ADDRESS)
    {

        MemoryStream ms = null;


        string sDecryptedUserID = uid;
        string sDecryptedFileID = fileID;
        string sDecryptedIPAddress = IP_ADDRESS;

        var downloadRecord = GetDownLoadRecord(sDecryptedUserID, sDecryptedFileID);
        if (downloadRecord != null)
        {
            ms = ExportFile(downloadRecord, sDecryptedUserID, sDecryptedIPAddress);
            if (ms != null)
                UpdateDownloadLog(downloadRecord, sDecryptedUserID, sDecryptedIPAddress);
        }
         //This is where I setup the message.
        if (ms != null)
        {
            HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
            result.Content = new StreamContent(ms);
            result.Content.Headers.ContentType =
                new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
            return result;
        }
        else
            return new HttpResponseMessage(HttpStatusCode.InternalServerError);
    }

要接收我使用此消息的消息:

        private bool GetDownload(string[] download, string userid, string IPADDRESS)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(uri);

        string url = @"api/Download?uid=" + userid + "&fileID=" + download[0] + "&IP_ADDRESS=" + IPADDRESS;

        HttpResponseMessage responseParent = client.GetAsync(url).Result;
        if (responseParent.IsSuccessStatusCode)
        {   

            //I don't know what to set the returned value to.
            StreamContent respMessage = responseParent.Content.ReadAsAsync<StreamContent>().Result;
            var byteArray = respMessage.ReadAsByteArrayAsync();
            //ExportFile(byteArray, download);
            return true;
        }
        else
            return false;

    }

我找不到任何说明如何解析返回值的信息。我有大量代码从WebAPI返回数据集,但这让我失望。如果有人能提供帮助我会非常感激。

我发现了这个JQuery示例,但我真的想在C#中这样做。 Jquery Web API Example

1 个答案:

答案 0 :(得分:0)

试试这个:

    HttpResponseMessage responseParent = client.GetAsync(url).Result;
    if (responseParent.IsSuccessStatusCode) {

        var byteArray = responseParent.Content.ReadAsByteArrayAsync().Result;

        //ExportFile(byteArray, download);
        return true;

    } else

        return false;

...或者看一下:exampleHttpContent创建一个直接保存到文件流的扩展方法。代码看起来更像这样。

问候