html5中文学习网

您的位置: 首页 > 网络编程 > ASP.NET » 正文

在ASP.NET开发中使用非.Net Web服务_.NET教程_编程技术

[ ] 已经帮助:人解决问题
asp.net|web|web服务
对于如何使用 WebRequest 和 WebResponse 类在 URI 上生成 POST 请求,在微软的 .Net 快速入门教程中有详细的描述(http://chs.gotdotnet.com/quickstart/howto/doc/WebRequests/clientPOST.aspx),简要引用如下:

WebResponse 类是抽象(在 Visual Basic 中为 MustInherit)基类,协议特定的响应类从该抽象基类派生。应用程序可以使用 WebResponse 类的实例以协议不可知的方式参与请求和响应事务,而从 WebResponse 派生的协议特定的类携带请求的详细信息。 ScbHTML5中文学习网 - HTML5先行者学习网

客户端应用程序不直接创建 WebResponse 对象,而是通过调用 WebRequest 实例上的 GetResponse 方法来创建它。 ScbHTML5中文学习网 - HTML5先行者学习网

对继承者的说明: 从 WebResponse 继承时,必须重写以下成员:ContentLength、ContentType、GetResponseStream、ResponseUri 和 Headers。 ScbHTML5中文学习网 - HTML5先行者学习网

如果需要使用 WebRequest 和 WebResponse 类在 URI 上生成 GET 请求。可在函数 getPage 中找到生成请求的特定详细信息。getPage 函数采用字符串参数,该参数是您请求的 Web 页的 URL(或 URI)。然后,此 URI 作为参数包括在对 WebRequest.Create 的调用中,该调用创建 WebRequest 对象。接着,WebRequest 对象的 GetResponse 函数用于获取 WebResponse 对象。此对象可用于获取响应的状态代码以及实际响应流(例如,Web 页)。可以采用几种不同的形式写出该流。 ScbHTML5中文学习网 - HTML5先行者学习网

在处理完响应流后,必须确保调用 WebResponse 对象的 Close 方法,以免泄露有价值的系统资源。 ScbHTML5中文学习网 - HTML5先行者学习网

如果需要使用 WebRequest 和 WebResponse 类在 URI 上生成 POST 请求。 则可采用类似于带有 GET 谓词的简单 WebRequest。其中有两处不同:
1) 谓词需要更改为 POST。
2) 需要对格式信息进行编码并发送到流中。
若要更改谓词,只需将 Method 属性设置为“POST”。 然后必须将 ContentType 属性设置为“application/x-www-form-urlencoded”。此时,确保所提供的字符串编码正确,所有内容都将被正确地传递 (POST)。 ScbHTML5中文学习网 - HTML5先行者学习网

处理完响应流后,必须确保调用 WebResponse 对象的 Close 方法,以免泄露有价值的系统资源。 ScbHTML5中文学习网 - HTML5先行者学习网

<!-- 正文 --> ScbHTML5中文学习网 - HTML5先行者学习网

了解了具体的实现方法及原理后,就可以实现其目的。首先需要一个函数以实现该功能: ScbHTML5中文学习网 - HTML5先行者学习网

/// <summary>
/// getPage 获得 Post 请求结果页
/// url 要请求的地址
/// payload 输入的参数<xml>
/// outputResp 输出结果
/// </summary>
private bool getPage(String url, String payload, ref string outputResp)
{
WebResponse result = null;
outputResp = "";
try
{
WebRequest req = WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
if (payload != null)
{
string UrlEncoded = payload; ScbHTML5中文学习网 - HTML5先行者学习网

byte[] SomeBytes = null;
SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();
}
else
{
req.ContentLength = 0;
}
result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(ReceiveStream, encode);
outputResp = sr.ReadToEnd();
}
catch(Exception e)
{
Console.WriteLine( e.ToString());
Console.WriteLine("/r/n找不到请求 URI,或者它的格式不正确");
return false;
}
finally
{
if ( result != null )
{
result.Close();
}
}
return true;
} ScbHTML5中文学习网 - HTML5先行者学习网

这个函数就实现了具体的请求功能,要求输入请求的地址(URL)及参数(payload:XML文件格式),然后 WebRequest 向服务地址发送 POST 请求,由 StreamReader 读出具体的结果,下面是一个具体的使用该函数的例子: ScbHTML5中文学习网 - HTML5先行者学习网

private void Button_ServerClick(object sender, System.EventArgs e)
{
string UserRegisterReq = "";
UserRegisterReq = @"<?xml version=""1.0"" encoding=""GB2312""?>
<ELink>
<MsgType>UserRegisterReq</MsgType>
<Version>1.0</Version>
<UserProfile>
<UserName>Test</UserName>
<UserPwd>Test</UserPwd>
</UserProfile>
</ELink>";
string outputResp = "";
bool IsReg = false;
IsReg = this.getPage(@"http://dll.test.com/test.dll/", UserRegisterReq, ref outputResp); ScbHTML5中文学习网 - HTML5先行者学习网

if(IsReg)
{
// outputResp = outputResp.Replace(@"<", "<");
// outputResp = outputResp.Replace(@">", ">");
Response.Write(outputResp);
}
} ScbHTML5中文学习网 - HTML5先行者学习网

Button_ServerClick 是一个 Button 单击事件,当输入正确的 URL(请求地址)和 payload(输入的参数),就得到由服务程序提供的返回值。 ScbHTML5中文学习网 - HTML5先行者学习网


ScbHTML5中文学习网 - HTML5先行者学习网
ScbHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助