准备 HttpResponseMessage 以从 Web API 返回文件,未得到预期结果

问题描述 投票:0回答:1

所以,我被一些事情难住了,我尽我所能把它降到最低限度,但否则就完成了。我正在使用 C# 工作。我有一个 C#.net WebAPI 项目和一个 C#.net WPF 应用程序作为客户端。

在客户端,我向控制器发送请求以获取服务器上的 zip 文件(我的同一台本地主机计算机,以便我可以测试/调试这两个部分)。这是代码

private static void SamplePost()
{
    var myURL = "http://localhost:52575/MySvc/GetZipFromWebAPI";
    var request = WebRequest.Create(myURL);
    request.Method = "POST";
    var data = System.Text.Encoding.ASCII.GetBytes("test string");
    request.Method = "POST";
    request.ContentType = "text/plain";
    request.ContentLength = data.Length;

    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }

    var response = (HttpWebResponse)request.GetResponse();
}

现在,在 WebAPI 项目中,我有控制器和公共方法,除了尝试返回固定的已知 zip 文件之外什么也不做。

public HttpResponseMessage GetZipFromWebAPI()
{
    var fileToSendBack = @"C:\Users\Public\Sample.zip";
    var fileBytes = System.IO.File.ReadAllBytes(fileToSendBack);
    var response = new HttpResponseMessage(HttpStatusCode.OK);
    var oneContent = new ByteArrayContent(fileBytes);
    oneContent.ReadAsByteArrayAsync();
    response.Content = oneContent;
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
    return response;
}

因此,我尝试像发送请求并返回响应一样简单。经过我多次不同的尝试,我得到的最好结果是文件大小正确(大约 12k zip 文件),但当我收到响应时客户端没有 ZIP。

无论我遗漏/误解了什么部分,如果能解决就太好了。我已经浏览了许多显示一侧或另一侧的帖子,但即使使用这些帖子,也没有得到我认为应该简单的东西。

c# asp.net-web-api model-view-controller webrequest httpresponsemessage
1个回答
0
投票

Web-API 端缺少的一件事是方法和参数属性 类似的东西

[HttpPost]
public HttpResponseMessage GetZipFromWebAPI([FromBody] string data)
© www.soinside.com 2019 - 2024. All rights reserved.