Silverlight POST请求并返回数据后保存文件
来源:互联网 发布:拍短片的软件 编辑:程序博客网 时间:2024/05/16 09:57
需要注意的地方:
1.HttpWebResponse 取Headers 的问题:
HttpWebResponse response = state as HttpWebResponse;
string result_code = response.Headers["RESULT_CODE"];
以上代码需要在应用的第一个构造函数中添加代码
bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
否则异常报错Headers方法没有被实现
2.SaveFileDialog在打开之后等待Http响应,使用响应数据来写文件,若同步等待那么用户线程将被阻塞,若异步在Http响应的回调函数中,sl处于安全考虑将不被允许在这里进行文件写入操作,那么只能使用SynchronizationContext,在Http回调函数中发送Post,而后转入用户线程,此时即可使用SaveFileDialog在OpenFile后得到的Stream进行文件写入,所以我们需要保留SaveFileDialog的文件Stream(sl中不能获取绝对路径的文件名)
3.url参数中的中文,在HttpWebRequest写入POST的请求参数时,转换为UTF-8字节流,而后在服务端使用UTF-8方式获取
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Text;
using System.Threading;
using System.Net.Browser;
using System.Windows.Resources;
namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
SynchronizationContext _syncContext;//同步上下文管理类
Stream _expFileStream = null;//导出文件的stream
byte[] _postData; //post的数据
public MainPage()
{
//没有此句在获取response的header时将异常:System.NotImplementedException: 该类没有实现这一属性。
bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
start();
}
void start()
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == true)
{
_expFileStream = sfd.OpenFile();
}
else
{
return;
}
//string poststr = "data=测试中文&compress=false";
//_postData = Encoding.UTF8.GetBytes(poststr);
//start_request("http://10.111.43.18:8099/pmias/test");
string url = "http://10.111.43.18:8099/pmias/servlet/db_proc";
string poststr = "para=U003V7M8RcUNUICAvKisgcGFyYWxsZWwgKHQsMTYpIChhMCwxNikgKi8gYTAuTEVWRUwzX05BTUUgIGFzIGNuMCxOVkwodC5USFpDUywwKSBGUk9NICAoU0VMRUNUIEZLX0dERFcsTEVWRUwzX05BTUUgRlJPTSBETV9EX0dERFcgd2hlcmUgRktfR0REVyBpbiAoJzAwMDEwJywnMDAwMTInLCcwMDAxMycsJzAwMDE0JywnMDAwMTUnKSkgYTAgIExFRlQgSk9JTiAoU0VMRUNUIEZLX0dERFcsU1VNKE5WTChUSFpDUywwKSkgYXMgVEhaQ1MgRlJPTSBETV9GX0ZXWkxGWCBBQSAgV0hFUkUgIChTVUJTVFIoRktfREFURSwwLDYpPj0yMDExMTEgQU5EIFNVQlNUUihGS19EQVRFLDAsNik8PTIwMTExMSkgR1JPVVAgQlkgRktfR0REVykgdCBPTiAgKHQuRktfR0REVz1hMC5GS19HRERXKSAgT1JERVIgQlkgIGEwLkZLX0dERFcgO3RydWU7c2VsZWN0O0dCSzswYTsyYw%3D%3D";
_postData = Encoding.UTF8.GetBytes(poststr);
start_request(url);
}
void start_request(string url)
{
_syncContext = SynchronizationContext.Current;
Uri endpoint = new Uri(url, UriKind.Absolute);
HttpWebRequest request = WebRequest.Create(endpoint) as HttpWebRequest;
request.Method = "POST";
IAsyncResult asyncResult = request.BeginGetRequestStream(
new AsyncCallback(callback_resuest), request);
}
private void callback_resuest(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
request.ContentType = "application/x-www-form-urlencoded";
Stream requestStream = request.EndGetRequestStream(result);
requestStream.Write(_postData, 0, _postData.Length);
requestStream.Close();
request.BeginGetResponse(new AsyncCallback(callback_response), request);
}
void callback_response(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
WebResponse response = request.EndGetResponse(asyncResult);
_syncContext.Post(callback_ui, response);
}
private void callback_ui(object state)
{
HttpWebResponse response = state as HttpWebResponse;
string result_code = response.Headers["RESULT_CODE"];
string compress = response.Headers["COMPRESS"];
if (result_code == "OK")
{
//返回数据被压缩
if (compress == "true")
{
ZipUtil.ZipStream2File(_expFileStream, response.GetResponseStream());
//string result = ZipUtil.ZipStream2String(response.GetResponseStream());
//MessageBox.Show("解压缩:\n"+result.);
response.Close();
}
else
{
ZipUtil.Stream2File(_expFileStream, response.GetResponseStream());
//string result = ZipUtil.Stream2String(response.GetResponseStream());
//MessageBox.Show("未压缩:\n"+result);
response.Close();
}
MessageBox.Show("文件保存成功");
}
else
{
_expFileStream.Close();
MessageBox.Show(result_code);
}
}
}
}
- Silverlight POST请求并返回数据后保存文件
- 解析HTTP POST方式请求的xml数据、本地XML文件数据, 并返回JSON字符串
- silverlight HttpWebRequest post请求数据
- Android向Web服务器发送Post请求并返回数据
- Android向Web服务器发送Post请求并返回数据
- 模拟http发送post请求并返回数据
- okhttp3封装 get post 请求 下载上传文件 Post请求发送JSON数据 判断下载目录是否存在......并返回绝对路径 从下载连接中解析出文件名
- java发送post请求并接收返回
- Node.js响应Ajax的POST请求并保存为JSON文件
- Jquery中post 请求后无数据返回的问题、jquery遍历json
- ajax post请求返回json数据后,页面不需要刷新的问题解决如例
- HttpURL连接远程服务器Get和Post方式请求并返回数据
- echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端
- php实现post请求 接收android客户端json数据 存储数据库 并返回json
- 前端jQuery向后台发送POST请求并接收后台返回的数据(C#)
- HTTP协议post请求返回json数据
- java GET和POST请求返回数据
- 保存数据返回后可以继续编辑
- lhgdialog窗口的各种在线演示示例
- Android之Notification
- 自定义JSP中的Taglib标签之五自定义标签之SimpleTagSupport使用
- 窗口lhgdialog.min.js文件的url参数
- 在WPF中自定义控件(3) CustomControl (下)
- Silverlight POST请求并返回数据后保存文件
- servlet应用
- PB-日志-系统函数2.13.7Match()、MatchW()
- 黑马程序员:反射的应用
- mapxtreme 添加图元
- No 105 · Web项目打包(自动创建iis和自动附加数据库)
- 求A的读数,你还记得怎么算吗?
- YUV相关色彩空间模型
- simulink模块图形的线宽调节