- 浏览: 145010 次
- 性别:
- 来自: 北京
文章分类
最新评论
假设我们要提供一个小小的服务,采用HTTP协议进行通讯,客户端 POST 一些数据到服务器上。客户端不一定是PC,更不一定会按照一个Web Form的格式来提交数据,它可能是一个运行在PC上的Desktop Application,也可能是一个移动设备。
服务器端接收这样的请求极其简单,下面寥寥数行代码即可实现:
在Web站点中新建一个Generic Handler(*.ashx),代码如下:
- <%@ WebHandler Language= "C#" Class= "Echo" %>
- using System;
- using System.Web;
- using System.IO;
- public class Echo : IHttpHandler
- {
- private System.Text.Encoding DefaultEncoding = System.Text.Encoding.UTF8;
- public void ProcessRequest (HttpContext context)
- {
- context.Response.ContentType = "text/plain" ;
- context.Response.ContentEncoding = DefaultEncoding;
- Stream inputStream = context.Request.InputStream;
- using (StreamReader reader = new StreamReader(inputStream, DefaultEncoding))
- {
- string requestContent = reader.ReadToEnd();
- string responseContent = string .Format( "Received: {0} <== END" , requestContent);
- context.Response.Write(responseContent);
- }
- }
- public bool IsReusable
- {
- get { return false ; }
- }
- }
然后我们写一个简单的客户端来测试它。在这个客户端里我们实现了一个类HttpClient来进行HTTP POST操作:
- // -----------------------------------------------------------------------
- // <copyright file="HttpClient.cs" author="Yaping Xin">
- // Http protocol client.
- // </copyright>
- // -----------------------------------------------------------------------
- namespace ConsoleClient
- {
- using System;
- using System.IO;
- using System.Net;
- using System.Text;
- /// <summary>
- /// Http protocol client.
- /// </summary>
- public class HttpClient
- {
- /// <summary>
- /// Post data to specific url and get response content.
- /// </summary>
- /// <param name="url">the url to post</param>
- /// <param name="postData">post data</param>
- /// <returns>response content</returns>
- public string Post( string url, string postData)
- {
- Uri uri = new Uri(url);
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
- request.Method = "POST" ;
- request.ContentType = "application/x-www-form-urlencoded" ;
- Encoding encoding = Encoding.UTF8;
- byte [] bytes = encoding.GetBytes(postData);
- request.ContentLength = bytes.Length;
- using (Stream writer = request.GetRequestStream())
- {
- writer.Write(bytes, 0, bytes.Length);
- writer.Close();
- }
- return this .ReadResponse(request);;
- }
- /// <summary>
- /// Read response content from http request result.
- /// </summary>
- /// <param name="request">http request object</param>
- /// <returns>response content.</returns>
- private string ReadResponse(HttpWebRequest request)
- {
- string result = string .Empty;
- using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
- {
- using (Stream responseStream = response.GetResponseStream())
- {
- using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
- {
- result = reader.ReadToEnd();
- reader.Close();
- }
- }
- }
- return result;
- }
- }
- }
然后我们这样就能得到HTTP POST的返回:
- // Replace the string content with your actual address please.
- string defaultUrl = "http://ServerName:8081/WebPath/AnyService.ashx" ;
- HttpClient client = new HttpClient();
- string response = client.Post(defaultUrl, @ "abc 123! 测试 @" );
- Console.OutputEncoding = System.Text.Encoding.UTF8;
- Console.WriteLine(response);
假设Client与Server两端都约定好采取某个格式对数据进行序列化与反序列化,例如都采用Json,客户端把对象通过Json封装后 Post给Server,Server再采用Json将对象从Json字符串中解析出来,这样进行数据传递是便利的。再假设我们要压缩传送出的数据量,那 么可以进行gzip压缩与解压。又假设我们要考虑安全性,那么我们可以在对象的结构中添加security token进行认证,以及采用某种加密算法对字符串进行加密与解密。怎么发挥就看您具体的应用了,构建一个属于您自己的轻量的service易如反掌。
发表评论
-
asp.net导出csv的例子
2012-10-26 14:35 3332http://wiki.asp.net/page.aspx ... -
在Visual Studio 2010中使用Visual Leak Detector
2012-10-26 14:08 788http://blog.csdn.net/xinyaping/ ... -
[科普小短文]在C#中调用C语言函数 (Linux & Mono版) 转
2012-10-26 13:57 1300http://blog.csdn.net/xinyaping/ ... -
在 Visual Studio 2012 中创建 ASP.Net Web Service 转
2012-10-26 13:53 1161http://blog.csdn.net/xinyaping/ ... -
错误时捕获和响应错误
2012-10-24 20:49 848ASP.NET 提供三种用于在出现错误时捕获和响应错误的主 ... -
asp.net 中的错误跳转 customerrors 对html文件不起作用 转载
2012-10-24 20:08 1323一般对于asp.net的网 ... -
ASP.NET自定义错误页面
2012-10-24 20:06 758ASP.NET 提供三种用于在出现错误时捕获和响应错误的主 ... -
ASP.NET页面错误处理及邮件发送简易方案
2012-10-18 16:58 8541包含页面:Default.aspx,Error.aspx ... -
ASP.NET中缓存(cache)的控制方法
2012-10-18 13:30 1452... -
ASP.NET页面执行顺序
2012-10-17 20:08 7251.对象初始化(OnInit方法) ... -
asp.net 格式化时间日期
2012-10-17 15:59 1111asp.net 格式化时间日期 ...
相关推荐
asp.net mvc handler
ASP.NET源码——利用handler生成静态页面的完整解决方案.zip
ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍...
using System.Collections.Generic; using System.Text; using System.Web; using System.Web.SessionState; namespace MyHandler { /// /// 目的:实现一个简单的自定义HttpHandler容器 /// 作者:文野 /// ...
包含177个文件,其中包括60个配置文件,53个C#源代码文件,17个ASPX页面文件,15个解决方案文件(.sln),15个项目文件(.csproj),10个JPEG图片文件,以及1个Git忽略文件和1个ASP.NET的Handler文件(ashx)。...
这篇文章以非常底层的视角讲述了Web请求(request)在ASP.NET框架中是如何流转的,从Web服务器,通过ISAPI直到请求处理器(handler)和你的代码.看看在幕后都发生了些什么,不要再把ASP.NET看成一个黑盒了.
代码为ASP.NET C#,采用asp.net和jquery异步方式实现。 用户登录采用模态弹出窗口,异步方式验证登录信息,不刷新页面。 用户注册,能检查用户名和密码是否为空,当用户输入用户名时可采用异步方式从数据库提取...
在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过。 今天闲来无事,准备用Rozor做个项目熟练下,结果写第一个页面就卡住了。。折腾半天才搞好,下面给大家分享下解决方案。先来给...
综合安卓蓝牙通信相关问题的详细操作。...定义handler时是要用static修饰,具体参考:http://blog.csdn.net/jdsjlzx/article/details/8463428 5.用于串口调试传输的字符时,需将String转换成char进行判定
ASP.NET 打包多CSS或JS文件以加快页面加载速度的Handler, 使用,具体的参数请参考程序中的介绍。
//h.post(r); /* * 在java中真正开启线程的方法是这样的。 */ Thread t = new Thread(r); t.start(); setContentView(R.layout.activity_main); System.out.println("Activity-->"+ Thread....
以前开发过一个用Asp.NET上传大文件的代码,由于是在NET1.1下开发的,发现不能在NET.20下运行,前几天将这个问题解决了,现在把整个开发过程整理一下,供大家参考。由于内容较多,所以我打算分成六篇来写,第一篇写...
asp.net ajax分页绑定数据 1.更改Handler文件下面GetDataSet方法中的数据库字段 表名 以及分页页数 2.更改default.aspx文件下 分页控制 3.添加分页存储过程 在压缩包里面都有
本文实例讲述了ASP.NET中常用输出JS脚本的类,针对过去输出js脚本的类进行了一定的改进。在项目开发中非常具有实用价值。分享给大家供大家参考。具体如下: 很多时候在ASP.NET中我们经常需要输出一些JS脚本,比如弹...
上传模块:通用upload handler,及缩略图生成方式(按需生成,即时生成,延迟生成) 管道模块:通用HttpModule,用于注入通用功能到各个应用及网站 应用模块三层架构 提供OA,CMS,CRM系统的原型及DAL,IBLL及BLL实现...
博客《AsnyncTask与handler(二)——handler消息机制》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/24783459
使用了ListView、Sqlite、Handler、Intent和SharedPreferences等Android基础知识。 博客介绍地址:https://blog.csdn.net/qq_42257666/article/details/121912803 运行演示的视频地址:...
NULL 博文链接:https://lzy.iteye.com/blog/292219
asp.net(c#)用httphandler加水印