asp.net服务器:asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误

在.net中发送 xml post请求和接受xml post请求时经常会遇到“远程服务器返回: (500) 内部服务器这里有2种解决办法:



种:修改请求端Content-Type 为“text/xml”(httpclient.Headers.Add("Content-Type", "text/xml");)

代码如下:


+ expand sourceview plaincopy to clipboardpr?
using ;
using .Collections.Generic;
using .Text;
using .Net;

Common
{
/// <summary>
/// 继承WebClient类
/// 提供向 URI 标识资源发送数据和从 URI 标识资源接收数据公共思路方法
/// 支持以 http:、https:、ftp:、和 file: 方案标识符开头 URI
/// </summary>
public HttpClient : WebClient
{
#region 远程POST数据并返回数据
/// <summary>
/// 利用WebClient 远程POST数据并返回数据
/// </summary>
/// <param name="strUrl">远程URL地址</param>
/// <param name="strParams">参数</param>
/// <param name="RespEncode">POST数据编码</param>
/// <param name="ReqEncode">获取数据编码</param>
/// <s></s>
public PostData( strUrl, strParams, Encoding RespEncode, Encoding ReqEncode)
{
HttpClient httpclient = HttpClient;
try
{
//打开页面
httpclient.Credentials = CredentialCache.DefaultCredentials;
//从指定URI下载资源
responseData = httpclient.DownloadData(strUrl);
srcString = RespEncode.GetString(responseData);

httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
postString = strParams;
// 将串转换成字节
postData = Encoding.ASCII.GetBytes(postString);
// 上传数据返回页面字节
responseData = httpclient.UploadData(strUrl, "POST", postData);
srcString = ReqEncode.GetString(responseData);

srcString;
}
catch(Exception ex)
{
//记录异常日志
//释放资源
httpclient.Dispose;
.Empty;
}
}

#endregion


/// <summary>
/// 利用WebClient 远程POST XML数据并返回数据
/// </summary>
/// <param name="strUrl">远程URL地址</param>
/// <param name="strParams">参数</param>
/// <param name="RespEncode">POST数据编码</param>
/// <param name="ReqEncode">获取数据编码</param>
/// <s></s>
public PostXmlData( strUrl, strParams, Encoding RespEncode, Encoding ReqEncode)
{
HttpClient httpclient = HttpClient;
try
{
//打开页面
httpclient.Credentials = CredentialCache.DefaultCredentials;
//从指定URI下载资源
responseData = httpclient.DownloadData(strUrl);
srcString = RespEncode.GetString(responseData);

httpclient.Headers.Add("Content-Type", "text/xml");
postString = strParams;
// 将串转换成字节
postData = Encoding.ASCII.GetBytes(postString);
// 上传数据返回页面字节
responseData = httpclient.UploadData(strUrl, "POST", postData);
srcString = ReqEncode.GetString(responseData);

srcString;
}
catch(Exception ex)
{
//记录异常日志
//释放资源
httpclient.Dispose;
.Empty;
}
}
}
}
using ;
using .Collections.Generic;
using .Text;
using .Net;

Common
{
/// <summary>
/// 继承WebClient类
/// 提供向 URI 标识资源发送数据和从 URI 标识资源接收数据公共思路方法
/// 支持以 http:、https:、ftp:、和 file: 方案标识符开头 URI
/// </summary>
public HttpClient : WebClient
{
#region 远程POST数据并返回数据
/// <summary>
/// 利用WebClient 远程POST数据并返回数据
/// </summary>
/// <param name="strUrl">远程URL地址</param>
/// <param name="strParams">参数</param>
/// <param name="RespEncode">POST数据编码</param>
/// <param name="ReqEncode">获取数据编码</param>
/// <s></s>
public PostData( strUrl, strParams, Encoding RespEncode, Encoding ReqEncode)
{
HttpClient httpclient = HttpClient;
try
{
//打开页面
httpclient.Credentials = CredentialCache.DefaultCredentials;
//从指定URI下载资源
responseData = httpclient.DownloadData(strUrl);
srcString = RespEncode.GetString(responseData);

httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
postString = strParams;
// 将串转换成字节
postData = Encoding.ASCII.GetBytes(postString);
// 上传数据返回页面字节
responseData = httpclient.UploadData(strUrl, "POST", postData);
srcString = ReqEncode.GetString(responseData);

srcString;
}
catch(Exception ex)
{
//记录异常日志
//释放资源
httpclient.Dispose;
.Empty;
}
}

#endregion


/// <summary>
/// 利用WebClient 远程POST XML数据并返回数据
/// </summary>
/// <param name="strUrl">远程URL地址</param>
/// <param name="strParams">参数</param>
/// <param name="RespEncode">POST数据编码</param>
/// <param name="ReqEncode">获取数据编码</param>
/// <s></s>
public PostXmlData( strUrl, strParams, Encoding RespEncode, Encoding ReqEncode)
{
HttpClient httpclient = HttpClient;
try
{
//打开页面
httpclient.Credentials = CredentialCache.DefaultCredentials;
//从指定URI下载资源
responseData = httpclient.DownloadData(strUrl);
srcString = RespEncode.GetString(responseData);

httpclient.Headers.Add("Content-Type", "text/xml");
postString = strParams;
// 将串转换成字节
postData = Encoding.ASCII.GetBytes(postString);
// 上传数据返回页面字节
responseData = httpclient.UploadData(strUrl, "POST", postData);
srcString = ReqEncode.GetString(responseData);

srcString;
}
catch(Exception ex)
{
//记录异常日志
//释放资源
httpclient.Dispose;
.Empty;
}
}
}
}


:
strUrl = http://localhost/testxml/Default.aspx;

strParams = @"<?xml version=""1.0"" encoding=""UTF-8"" ?><channel><title>blogweather</title></channel>";

Value = HttpClient.PostXmlData(strUrl, strParams, Encoding.UTF8, Encoding.UTF8);


这种思路方法适用于接收端是区别语言开发web服务(jsp,php,asp.net等)


第 2种:在我们平常开发异步接口时候往往需要开发个windows service用来发送post请求(可以种思路方法);另外需要提供个web接收端接收对方异步当接收post数据是xml时对方提供接口是就会出现“远程服务器返回: (500) 内部服务器
这是请求验证所导致只需要禁用掉请求验证就可以正常通讯了在<@Page..%>中设置 ValidateRequest="false" 即可(这里无需修改Content-type)







请求端:



strUrl = http://localhost/testxml/Default2.aspx;

strParams = @"<?xml version=""1.0"" encoding=""UTF-8"" ?><channel><title>blogweather</title></channel>";

Value = HttpClient.PostData(strUrl, strParams, Encoding.UTF8, Encoding.UTF8);



或者



Value = HttpClient.PostXmlData(strUrl, strParams, Encoding.UTF8, Encoding.UTF8);





接收post xml 请求:

request;
using (Stream MyStream = Request.InputStream)
{
_tmpData = [MyStream.Length];
MyStream.Read(_tmpData, 0, _tmpData.Length);
request = Encoding.UTF8.GetString(_tmpData);
}
Response.Write(request);
Tags:  asp.net服务器软件 asp.netweb服务器 asp.net服务器控件 asp.net服务器

延伸阅读

最新评论

发表评论