asp.net中一样,如果要实现url重定向,使用response.Redirect()方法即可,在中使用如下:
string desUrl = "http://www.google.com";
response.Redirect(desUrl);
response.OutputStream.Close();
如果desUrl执行的是网络上的一个文件,一般ie就会提示文件下载。但是,许多时候,ie会打开这个文件(如目标是文本文件就会这样),这有时不是我们所需要的,如何强制ie以下载的方式获取文件呢?解决方式如下:
static void ProcessHttpClient(object obj)
{
HttpListenerContext context = obj as HttpListenerContext;
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
response.ContentType = "application/octet-stream";
string fileName = "time.txt";
response.AddHeader("Content-Disposition", "attachment;FileName=" + fileName);
byte[] data = Encoding.Default.GetBytes(string.Format("当前时间: {0}", DateTime.Now));
response.ContentLength64 = data.Length;
System.IO.Stream output = response.OutputStream;
output.Write(data, 0, data.Length);
output.Close();
}
static void ProcessHttpClient(object obj)
{
HttpListenerContext context = obj as HttpListenerContext;
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
FileStream fs = File.OpenRead(@"f:/123.pdf"); //待下载的文件
long startPos = 0;
string range = request.Headers["Range"];
bool isResume = string.IsNullOrEmpty(range);
if (isResume) //断点续传请求
{
//格式bytes=9216-
startPos = long.Parse(range.Split('=')[1].Split('-')[0]);
response.StatusCode = 206;
response.ContentLength64 = fs.Length - startPos;
fs.Position = startPos; //设置传送的起始位置
}
else
{
response.ContentLength64 = fs.Length;
}
Console.WriteLine("request header");
Console.WriteLine(request.Headers.ToString());
response.ContentType = "application/octet-stream";
string fileName = "time.pdf";
response.AddHeader("Content-Disposition", "attachment;FileName=" + fileName);
Stream output = response.OutputStream;
try
{
Console.WriteLine("response header");
Console.WriteLine(response.Headers.ToString());
CopyStream(fs, output); //文件传输
output.Close();
}
catch (HttpListenerException e) //在未写完所有文件时,如果客户端关闭连接,会抛此异常
{
Console.WriteLine(e.Message);
//output.Close(); //如果执行此函数会抛异常在写入所有字节之前不能关闭流。
}
}
static void CopyStream(Stream orgStream, Stream desStream)
{
byte[] buffer = new byte[1024];
int read = 0;
while ((read = orgStream.Read(buffer, 0, 1024)) > 0)
{
desStream.Write(buffer, 0, read);
System.Threading.Thread.Sleep(1000); //模拟慢速设备
}