asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误(WebClient学习笔记)
2011-03-12 23:16
946 查看
在.net中发送 xml post请求和接受xml 的post请求时,经常会遇到“远程服务器返回错误: (500) 内部服务器错误”。这里有2种解决办法:
第一种:修改请求端Content-Type 为“text/xml”(httpclient.Headers.Add("Content-Type", "text/xml");)
代码如下:
调用:
这种方法适用于接收端是不同语言开发的web服务(jsp,php,asp.net等)
第二种:在我们平常开发异步接口的时候,往往需要开发一个windows service用来发送post请求(可以调用第一种方法);另外需要提供一个web接收端接收对方的异步调用。当接收的post数据是xml时,对方调用你的提供的接口是就会出现“远程服务器返回错误: (500) 内部服务器错误。”。
这是请求验证所导致的,只需要禁用掉请求验证就可以正常通讯了。在<@Page..%>中设置 ValidateRequest="false" 即可。(这里无需修改Content-type)
请求端调用:
或者
接收post xml 请求:
第一种:修改请求端Content-Type 为“text/xml”(httpclient.Headers.Add("Content-Type", "text/xml");)
代码如下:
+ expand sourceview plaincopy to clipboardprint? using System; using System.Collections.Generic; using System.Text; using System.Net; namespace Common { /// <summary> /// 继承WebClient类 /// 提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法 /// 支持以 http:、https:、ftp:、和 file: 方案标识符开头的 URI /// </summary> public class 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> /// <returns></returns> public static string PostData(string strUrl, string strParams, Encoding RespEncode, Encoding ReqEncode) { HttpClient httpclient = new HttpClient(); try { //打开页面 httpclient.Credentials = CredentialCache.DefaultCredentials; //从指定的URI下载资源 byte[] responseData = httpclient.DownloadData(strUrl); string srcString = RespEncode.GetString(responseData); httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); string postString = strParams; // 将字符串转换成字节数组 byte[] postData = Encoding.ASCII.GetBytes(postString); // 上传数据,返回页面的字节数组 responseData = httpclient.UploadData(strUrl, "POST", postData); srcString = ReqEncode.GetString(responseData); return srcString; } catch(Exception ex) { //记录异常日志 //释放资源 httpclient.Dispose(); return string.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> /// <returns></returns> public static string PostXmlData(string strUrl, string strParams, Encoding RespEncode, Encoding ReqEncode) { HttpClient httpclient = new HttpClient(); try { //打开页面 httpclient.Credentials = CredentialCache.DefaultCredentials; //从指定的URI下载资源 byte[] responseData = httpclient.DownloadData(strUrl); string srcString = RespEncode.GetString(responseData); httpclient.Headers.Add("Content-Type", "text/xml"); string postString = strParams; // 将字符串转换成字节数组 byte[] postData = Encoding.ASCII.GetBytes(postString); // 上传数据,返回页面的字节数组 responseData = httpclient.UploadData(strUrl, "POST", postData); srcString = ReqEncode.GetString(responseData); return srcString; } catch(Exception ex) { //记录异常日志 //释放资源 httpclient.Dispose(); return string.Empty; } } } } using System; using System.Collections.Generic; using System.Text; using System.Net; namespace Common { /// <summary> /// 继承WebClient类 /// 提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法 /// 支持以 http:、https:、ftp:、和 file: 方案标识符开头的 URI /// </summary> public class 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> /// <returns></returns> public static string PostData(string strUrl, string strParams, Encoding RespEncode, Encoding ReqEncode) { HttpClient httpclient = new HttpClient(); try { //打开页面 httpclient.Credentials = CredentialCache.DefaultCredentials; //从指定的URI下载资源 byte[] responseData = httpclient.DownloadData(strUrl); string srcString = RespEncode.GetString(responseData); httpclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); string postString = strParams; // 将字符串转换成字节数组 byte[] postData = Encoding.ASCII.GetBytes(postString); // 上传数据,返回页面的字节数组 responseData = httpclient.UploadData(strUrl, "POST", postData); srcString = ReqEncode.GetString(responseData); return srcString; } catch(Exception ex) { //记录异常日志 //释放资源 httpclient.Dispose(); return string.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> /// <returns></returns> public static string PostXmlData(string strUrl, string strParams, Encoding RespEncode, Encoding ReqEncode) { HttpClient httpclient = new HttpClient(); try { //打开页面 httpclient.Credentials = CredentialCache.DefaultCredentials; //从指定的URI下载资源 byte[] responseData = httpclient.DownloadData(strUrl); string srcString = RespEncode.GetString(responseData); httpclient.Headers.Add("Content-Type", "text/xml"); string postString = strParams; // 将字符串转换成字节数组 byte[] postData = Encoding.ASCII.GetBytes(postString); // 上传数据,返回页面的字节数组 responseData = httpclient.UploadData(strUrl, "POST", postData); srcString = ReqEncode.GetString(responseData); return srcString; } catch(Exception ex) { //记录异常日志 //释放资源 httpclient.Dispose(); return string.Empty; } } } }
调用:
string strUrl = http://localhost/testxml/Default.aspx; string strParams = @"<?xml version=""1.0"" encoding=""UTF-8"" ?><channel><title>blogweather</title></channel>"; string returnValue = HttpClient.PostXmlData(strUrl, strParams, Encoding.UTF8, Encoding.UTF8);
这种方法适用于接收端是不同语言开发的web服务(jsp,php,asp.net等)
第二种:在我们平常开发异步接口的时候,往往需要开发一个windows service用来发送post请求(可以调用第一种方法);另外需要提供一个web接收端接收对方的异步调用。当接收的post数据是xml时,对方调用你的提供的接口是就会出现“远程服务器返回错误: (500) 内部服务器错误。”。
这是请求验证所导致的,只需要禁用掉请求验证就可以正常通讯了。在<@Page..%>中设置 ValidateRequest="false" 即可。(这里无需修改Content-type)
请求端调用:
string strUrl = http://localhost/testxml/Default2.aspx; string strParams = @"<?xml version=""1.0"" encoding=""UTF-8"" ?><channel><title>blogweather</title></channel>"; string returnValue = HttpClient.PostData(strUrl, strParams, Encoding.UTF8, Encoding.UTF8);
或者
string returnValue = HttpClient.PostXmlData(strUrl, strParams, Encoding.UTF8, Encoding.UTF8);
接收post xml 请求:
string request; using (Stream MyStream = Request.InputStream) { byte[] _tmpData = new byte[MyStream.Length]; MyStream.Read(_tmpData, 0, _tmpData.Length); request = Encoding.UTF8.GetString(_tmpData); } Response.Write(request);
相关文章推荐
- asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误(WebClient学习笔记)
- asp.net 发送 xml post请求和接收 xml post请求时出现(500) 内部服务器错误的解决办法
- ASP.NET通过Base64String上传超过3M的文件时,出现“远程服务器返回错误: (500) 内部服务器错误。“,的解决方法
- 用dw(dreamweaver)开发asp.net,连接数据库时出现“http错误500,服务器内部错误”的解决方法
- WIN2003的IIS6调试ASP出现HTTP 500 - 内部服务器错误
- 解决XP的IIS "HTTP 500”内部服务器错误--asp和asp.net服务器ISS
- 在iis中发布asp的网站后,只显示登陆页面,其他的页面都不显示,并出现http500内部服务器错误,是怎么回事?
- 初涉Ajax,以post或get方法发送数据,以json或xml形式接收服务器返回的请求
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- 在IIS中运行asp.net页面报HTTP 500 - 内部服务器错误的解决办法
- aspcms + IIS 7.0 出现 500 - 内部服务器错误。
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
- 2003 IIS6 ASP http 500 - 内部服务器错误 请求的资源在使用中(ZZ)
- 黑马程序员之ASP.NET学习笔记: Http方法:Get请求与Post请求的区别
- [Erlang 学习笔记] 通过 erlang 向服务器发送 http post 请求
- 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串
- 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或打开对每个 Microsoft .NET Framework SDK 文档的跟踪并检查服务器跟踪日志。
- win7 asp.net HTTP 500内部服务器错误解决办法
- java 其他平台 请求 访问 asp.net webservice 返回 500 服务器错误
- IIS运行不了ASP.NET的解决方案 & HTTP 500 - 内部服务器错误的解决方案