概述
最近要写接口,其中有一个要使用页面去接受数据,想了想怎么处理,想到一个方案。
要求是点击按钮向一个aspx页面post数据并且打开这个页面并显示post来的数据,于是搜索到了一个解决方案
首先在发起跳转和传数据的页面做手脚,搜索到了一个文章,介绍到了一个httphelper,文章链接:http://www.cnblogs.com/gb2013/p/aspnet_post_and_redirect.html
于是用这个成功实现了跳转,但是是当前页面,而不是新开的一个新的页面窗口,于是看这个类里面的PreparePOSTForm方法,然后做了改动,将form加了个target="_blank",于是实现了跳转新打开页面并post数据,该类方法不做解释,看类代码就懂了。
在接收数据的页面,也就是目标aspx页面写了处理请求的方法
pageload代码:
if (!Page.IsPostBack)
{
ProcessRequest();
}
ProcessRequest方法:
// 获取所有的请求信息
string A= Request["A"].ToString();
string B= Request["B"].ToString();
string C= Request["C"].ToString();
string D= Request["D"].ToString();
string E= Request["E"].ToString();
// 先进行验证
string VE= FormsAuthentication.HashPasswordForStoringInConfigFile(A+ B+ C+ D+ E, "MD5");
// 进行判断是不是对的,有没有丢数据
if (VE== E)
{
// 相等,则可以进行正常操作
// 前台页面的数据绑定等相关操作写在这里
}
else
{
// 不相等,有数据丢失,要求重新发送请求
// 进行数据丢失处理
}
以上方法没有涉及json序列化和加密等相关内容,仅有一个校验数据的过程,若有json和其他加密方式则可以获取请求的数据流进行解析即可。
另,该方法没有返回数据,仅限对方发来请求,接收方处理,但不返回数据或者数据返回需要以请求形式返回,这个是由于httphelper那个方法是提交形式发来的数据,如果需要直接返回则应当使用一般处理程序等其他方法。
将数据处理完成之后返回给发送方
// 初始化
Uri uri = new Uri("http://localhost:888/abc.aspx");// 目标地址
HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
request.Method = "POST";
Encoding encoding = Encoding.GetEncoding("utf-8");
// 开始组装请求数据
string A= "a";
string B = "b";
string C= "c";
string D= "d";
string E= FormsAuthentication.HashPasswordForStoringInConfigFile(A+ B+ C+ D+ "A", "MD5");
// 把这些数据组装成请求
string postData = ""; // 组装要返回的数据,如果json需要将这个在序列化一下
byte[] byteData = encoding.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteData.Length;
try
{
using (Stream postStream = request.GetRequestStream())
{
// 发送数据,如果没有后面被注释掉的部分,请求会在这个方法执行完成之后再发送
postStream.Write(byteData, 0, byteData.Length);
}
//try
//{
//
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
//
{
//
StreamReader reader = new StreamReader(response.GetResponseStream());
//
string responseStr = reader.ReadToEnd(); // 同理,如果是经过了序列化的流需要在这里进行反序列化等相关操作
//
if (responseStr != null && responseStr.Length > 0) // 返回的数据处理
//
{
//
// 完成
//
}
//
else
//
{
//
// 失败
//
}
//
}
//}
//catch (WebException ee)
//{
//
string error = ee.Message;
//}
}
catch (Exception ex)
{
string error = ex.Message;
}
以上就实现了网络接口,仅仅是最基本功能,不包括序列化和加密等操作。
如果接受的是一般处理程序,代码也基本相同,仅仅是返回的时候进行的处理,
返回部分代码如下:
// 返回处理结果
context.Response.ContentType = "application/x-www-form-urlencoded";
context.Response.Write(postData);
该段代码仅仅是返回结果的类型处理,其中postData是经过处理的数据,类型与Write方法相符就行,Write方法有4个重载,支持的类型,有:char c, object obj, string s 和 char[] buffer,int index,int count,使用参考文档。
.net MVC里面使用的是controller进行这个操作,里面的实现方式相同。但是controller可以直接返回数据,将控制器的方法的返回类型改一下然后返回就好。
更新————————
今天用接口传图片的时候,双方使用base64串进行传输,传输过程中发现图片数据丢失,于是各种找问题,最后发现是传输过程中对base64进行了解密,导致的数据丢失,接收数据方那边是直接多进行了一次解密,于是发送方进行了URLEncode,于是该问题解决了。
最后
以上就是高挑狗为你收集整理的.net中http接口相关的全部内容,希望文章能够帮你解决.net中http接口相关所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复