`

Example: Receive HTTP Post via ASP.Net Generic Handler 转

 
阅读更多

假设我们要提供一个小小的服务,采用HTTP协议进行通讯,客户端 POST 一些数据到服务器上。客户端不一定是PC,更不一定会按照一个Web Form的格式来提交数据,它可能是一个运行在PC上的Desktop Application,也可能是一个移动设备。

 

服务器端接收这样的请求极其简单,下面寥寥数行代码即可实现:

在Web站点中新建一个Generic Handler(*.ashx),代码如下:

  1. <%@ WebHandler Language= "C#"  Class= "Echo"  %>  
  2.   
  3. using  System;  
  4. using  System.Web;  
  5. using  System.IO;  
  6.   
  7. public   class  Echo : IHttpHandler  
  8. {  
  9.     private  System.Text.Encoding DefaultEncoding = System.Text.Encoding.UTF8;  
  10.       
  11.     public   void  ProcessRequest (HttpContext context)  
  12.     {  
  13.         context.Response.ContentType = "text/plain" ;  
  14.         context.Response.ContentEncoding = DefaultEncoding;  
  15.   
  16.         Stream inputStream = context.Request.InputStream;  
  17.         using  (StreamReader reader =  new  StreamReader(inputStream, DefaultEncoding))  
  18.         {  
  19.             string  requestContent = reader.ReadToEnd();  
  20.             string  responseContent =  string .Format( "Received: {0} <== END" , requestContent);  
  21.               
  22.             context.Response.Write(responseContent);  
  23.         }  
  24.     }  
  25.   
  26.     public   bool  IsReusable  
  27.     {  
  28.         get  {  return   false ; }  
  29.     }  
  30. }  

然后我们写一个简单的客户端来测试它。在这个客户端里我们实现了一个类HttpClient来进行HTTP POST操作:
  1. // -----------------------------------------------------------------------   
  2. // <copyright file="HttpClient.cs" author="Yaping Xin">   
  3. // Http protocol client.   
  4. // </copyright>   
  5. // -----------------------------------------------------------------------   
  6.   
  7. namespace  ConsoleClient  
  8. {  
  9.     using  System;  
  10.     using  System.IO;  
  11.     using  System.Net;  
  12.     using  System.Text;  
  13.   
  14.     /// <summary>   
  15.     /// Http protocol client.   
  16.     /// </summary>   
  17.     public   class  HttpClient  
  18.     {  
  19.         /// <summary>   
  20.         /// Post data to specific url and get response content.   
  21.         /// </summary>   
  22.         /// <param name="url">the url to post</param>   
  23.         /// <param name="postData">post data</param>   
  24.         /// <returns>response content</returns>   
  25.         public   string  Post( string  url,  string  postData)  
  26.         {  
  27.             Uri uri = new  Uri(url);  
  28.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);  
  29.             request.Method = "POST" ;  
  30.             request.ContentType = "application/x-www-form-urlencoded" ;  
  31.   
  32.             Encoding encoding = Encoding.UTF8;  
  33.             byte [] bytes = encoding.GetBytes(postData);  
  34.   
  35.             request.ContentLength = bytes.Length;  
  36.   
  37.             using  (Stream writer = request.GetRequestStream())  
  38.             {  
  39.                 writer.Write(bytes, 0, bytes.Length);  
  40.                 writer.Close();  
  41.             }  
  42.   
  43.             return   this .ReadResponse(request);;  
  44.         }  
  45.   
  46.         /// <summary>   
  47.         /// Read response content from http request result.   
  48.         /// </summary>   
  49.         /// <param name="request">http request object</param>   
  50.         /// <returns>response content.</returns>   
  51.         private   string  ReadResponse(HttpWebRequest request)  
  52.         {  
  53.             string  result =  string .Empty;  
  54.   
  55.             using  (HttpWebResponse response = (HttpWebResponse)request.GetResponse())  
  56.             {  
  57.                 using  (Stream responseStream = response.GetResponseStream())  
  58.                 {  
  59.                     using  (StreamReader reader =  new  StreamReader(responseStream, Encoding.UTF8))  
  60.                     {  
  61.                         result = reader.ReadToEnd();  
  62.                         reader.Close();  
  63.                     }  
  64.                 }  
  65.             }  
  66.   
  67.             return  result;  
  68.         }  
  69.     }  
  70. }  

然后我们这样就能得到HTTP POST的返回:

  1. // Replace the string content with your actual address please.   
  2. string  defaultUrl =  "http://ServerName:8081/WebPath/AnyService.ashx" ;  
  3.   
  4. HttpClient client = new  HttpClient();  
  5. string  response = client.Post(defaultUrl, @ "abc 123! 测试 @" );  
  6.   
  7. Console.OutputEncoding = System.Text.Encoding.UTF8;  
  8. Console.WriteLine(response);  


假设Client与Server两端都约定好采取某个格式对数据进行序列化与反序列化,例如都采用Json,客户端把对象通过Json封装后 Post给Server,Server再采用Json将对象从Json字符串中解析出来,这样进行数据传递是便利的。再假设我们要压缩传送出的数据量,那 么可以进行gzip压缩与解压。又假设我们要考虑安全性,那么我们可以在对象的结构中添加security token进行认证,以及采用某种加密算法对字符串进行加密与解密。怎么发挥就看您具体的应用了,构建一个属于您自己的轻量的service易如反掌。

 

分享到:
评论

相关推荐

    asp.net mvc handler

    ASP.NET MVC Handler 是微软开发的一种Web应用程序框架,用于构建可维护性和可测试性极高的Web应用。这个框架基于模型-视图-控制器(MVC)设计模式,它为开发者提供了更多的控制力和灵活性,使他们能够更高效地构建...

    例子代码 android http://blog.csdn.net/qq282133/article/details/7616809

    2. **异步请求**:由于Android主线程不允许执行耗时操作,网络请求通常在后台线程进行,然后通过Handler、AsyncTask或者现代的Retrofit+RxJava组合将结果传递到主线程更新UI。 3. **JSON解析**:HTTP请求的响应通常...

    ASP.NET源码——利用handler生成静态页面的完整解决方案.zip

    在这个"ASP.NET源码——利用handler生成静态页面的完整解决方案.zip"压缩包中,我们可以看到一个利用ASP.NET Handler(HttpHandler)来生成静态HTML页面的实践案例。 Handler在ASP.NET中扮演着处理特定HTTP请求的...

    .NET C# ASP.NET 文字转语音.zip

    在这个特定的".NET C# ASP.NET 文字转语音.zip"项目中,开发者利用了Text-to-Speech(TTS)技术,将文字转化为可听的语音。这种技术在各种应用场景中非常有用,比如无障碍阅读、自动客服系统或者教育软件等。 首先...

    【ASP.NET编程知识】如何ASP.NET Core Razor中处理Ajax请求.docx

    RazorPages 使用处理程序方法来处理传入的 HTTP 请求(GET / POST / PUT / Delete),这些类似于 ASP.NET MVC 或 WEB API 的 Action 方法。 Razor Pages 遵循特定的命名约定,Handler 方法也是如此。他们也遵循特定...

    Asp.net试题素材管理系统源码

    1. **Asp.net架构**:Asp.net基于.NET Framework,采用HTTP协议处理请求。其工作流程包括请求接收、页面生命周期管理、控件事件处理和响应生成等步骤,确保了高效的页面处理。 2. **MVC模式**:Asp.net支持MVC...

    asp.net+jquery+ajax所有调用例子

    ASP.NET 是一个强大的Web应用程序开发框架,由微软公司推出,用于构建动态、数据驱动的Web应用。jQuery 是一个流行的JavaScript库,它简化了DOM操作、事件处理和Ajax交互。Ajax(Asynchronous JavaScript and XML)...

    asp.net(c#)实现在线拍照上传

    3. **服务器端处理**:在ASP.NET中,我们需要一个接收图片数据的HTTP POST接口。可以创建一个ASHX(HTTP Handler)或者API控制器来处理这个请求。C#代码会接收到二进制数据,然后将其保存为图片文件。考虑到安全性和...

    swfupload+asp.net实例

    (3)**后端处理**:在ASP.NET中,创建一个接收文件的HTTP Handler或ASP.NET Page。接收到文件后,可以进行文件验证、存储到服务器的指定位置,或者执行其他业务逻辑。 (4)**反馈结果**:当文件上传成功,ASP.NET...

    ASP.NET增删改查例子(作业)

    例如,创建一个HTML表单,用户填写信息后,通过HTTP POST提交到服务器端,服务器端的ASP.NET代码捕获这些数据,创建一个新的数据库记录。 2. **删除(Delete)**:这个操作涉及到从数据库中移除特定的记录。这可能...

    asp.net jqgrid例子

    ASP.NET与jqGrid结合使用是Web开发中一种常见的数据展示技术。jqGrid是一个强大的JavaScript库,用于在网页上创建交互式的数据网格。本示例主要介绍如何在ASP.NET环境中利用jqGrid来显示JSON数据,解决可能遇到的...

    httpHandler实现.Net无后缀名Web访问

    2. **Web.Config配置文件**:这是ASP.NET应用程序的核心配置文件,用于存储整个应用的配置信息,包括应用程序的运行时设置、连接字符串、路由规则、安全设置等。 3. **IIS(Internet Information Services)**:它...

    asp.net上传模块

    ASP.NET上传模块是ASP.NET应用程序中的一个重要组成部分,它允许用户通过网页将文件上传到服务器。在Web开发中,文件上传功能常用于用户提交照片、文档或其他类型的数据。在这个场景中,我们关注的是一个专为ASP.NET...

    ASP.NET底层架构学习笔记

    - **与HTTP服务器分离**:ASP.NET与HTTP/Web服务器(如IIS)是完全分离的,这意味着即使没有IIS或其他Web服务器的支持,ASP.NET也可以独立运行。开发者可以选择将ASP.NET运行时嵌入到其他类型的程序中,比如Windows ...

    ASP.NET动态验证码

    在ASP.NET中,我们可以创建一个HTTP Handler(ashx文件)或者Web Control(ascx文件)来处理验证码的生成。当用户请求验证码图片时,服务器端的代码会执行上述生成验证码和图像的过程,然后将生成的图像以JPEG或PNG...

    asp.net使用jquery ajax 小例子

    对于ASP.NET,后台处理程序(Generic Handler)是一种轻量级的HTTP处理器,可以用来处理AJAX请求。创建一个新的`.ashx`文件,然后在其中定义处理逻辑: ```csharp public class YourHandler : IHttpHandler { ...

    swfupload(asp.net)

    **SWFUpload ASP.NET:构建高效文件上传功能** SWFUpload 是一个开源的JavaScript库,专为Web应用程序设计,提供了一种优雅的方式处理文件上传,尤其是对于ASP.NET平台。它支持多选文件、显示上传进度条,使得用户...

    带进度条的ASP.NET上传 v1.0.rar

    1. **UploadHandler.ashx**:这是一个HTTP处理程序(HTTP Handler),在ASP.NET中用于处理特定类型的请求。在这个案例中,它可能被用来接收和处理文件上传请求,同时更新进度条状态。 2. **Upload.aspx**:这是一个...

    jquery ajax在asp.net中的应用

    **jQuery AJAX 在 ASP.NET 中的应用** 在Web开发中,jQuery AJAX 提供了一种高效、便捷的方式,用于在不刷新整个页面的情况下与服务器进行异步通信。在ASP.NET框架下,结合jQuery,我们可以创建动态、交互性强的Web...

Global site tag (gtag.js) - Google Analytics