gpt4 book ai didi

c# - ASMX文件下载

转载 作者:行者123 更新时间:2023-11-30 14:02:59 25 4
gpt4 key购买 nike

我有一个 ASMX(无 WCF)网络服务,其方法可以响应如下所示的文件:

[WebMethod]
public void GetFile(string filename)
{
var response = Context.Response;
response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
using (FileStream fs = new FileStream(Path.Combine(HttpContext.Current.Server.MapPath("~/"), fileName), FileMode.Open))
{
Byte[] buffer = new Byte[256];
Int32 readed = 0;

while ((readed = fs.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, readed);
response.Flush();
}
}
}

我想在我的控制台应用程序中使用 Web 引用将此文件下载到本地文件系统。如何获取文件流?

附言我尝试通过发布请求(使用 HttpWebRequest 类)下载文件,但我认为有更优雅的解决方案。

最佳答案

您可以在您的网络服务的 web.config 中启用 HTTP。

    <webServices>
<protocols>
<add name="HttpGet"/>
</protocols>
</webServices>

然后你应该能够只使用网络客户端下载文件(用文本文件测试):

string fileName = "bar.txt"
string url = "http://localhost/Foo.asmx/GetFile?filename="+fileName;
using(WebClient wc = new WebClient())
wc.DownloadFile(url, @"C:\bar.txt");

编辑:

要支持设置和检索 cookie,您需要编写自定义 WebClient覆盖 GetWebRequest() 的类,很容易做到,只需几行代码:

public class CookieMonsterWebClient : WebClient
{
public CookieContainer Cookies { get; set; }

protected override WebRequest GetWebRequest(Uri address)
{
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
request.CookieContainer = Cookies;
return request;
}
}

要使用此自定义 Web 客户端,您需要:

myCookieContainer = ... // your cookies

using(CookieMonsterWebClient wc = new CookieMonsterWebClient())
{
wc.Cookies = myCookieContainer; //yum yum
wc.DownloadFile(url, @"C:\bar.txt");
}

关于c# - ASMX文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4787122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com