用于REST请求的自定义HTTP处理程序

时间:2012-04-18 23:53:09

标签: asp.net rest httphandler

我确信这是一个简单的解决办法 - 但是经过几个小时的谷歌搜索,我找不到答案。

我要做的是设置一个自定义处理程序,它将处理{domain} / services / *路径的所有请求。

我有一个包含大量javascript和ajax调用的Web应用程序。我想实现一个处理程序,以促进其他服务的所有请求(谷歌地图,一些自定义服务等)。这将允许我在客户端上利用缓存和简单配置。

我的问题是处理程序的实现。我无法通过上面的路径信息捕获任何请求的IIS Express(或内置的VS 2010 Web服务器)。

我希望JavaScript客户端能够进行RESTful调用,让处理程序选择调用并相应地进行处理。

这是我到目前为止所做的:

  1. 实现了继承IHTTPHandler接口的类(此类位于App_Code文件夹中)。
  2. 配置Web.Config: system.webServer  modules runAllManagedModulesForAllRequests =“true”     处理器       add name =“SeviceHandler”verb =“”path =“ / services / *”type =“MyWeb.UI.ServiceHandler,MyWeb.UI”resourceType =“Unspecified” 处理器 system.webServer
  3. 我在这里感谢一些帮助。这让我疯了。

2 个答案:

答案 0 :(得分:1)

在.Net中,Microsoft在WCF应用程序中提供了构建api的其余架构,该应用程序通过webHttpBinding协议管理请求和响应。

实现简单的自定义HttpHandler可能更有益/更有效,而不是调用与ASP.NET Web服务相关的所有管道和开销。使用自定义HttpHandler,您只需发送所需的参数,并准确返回您想要查看的结果,而无需在使用XML Web服务时创建任何支持的SOAP xml。

Bellow是自定义处理程序(我们也可以使用.ashx文件,但不支持自定义处理程序提供的虚拟路径或虚拟扩展)

<system.web>
 <httpHandlers>
   <add verb="*" path="Services.fck" type="restHandler"/>
</httpHandlers> 

.....

if (Request.RequestType == "GET")
{

  //RawUrl=http://localhost/Services.fck/?Vivek/Gupta
  string RawUrl = Request.RawUrl;
  string splitter = "/?";
  string SubRawUrl = RawUrl.Substring(RawUrl.IndexOf(splitter) + splitter.Length);

  string[] Parameters = SubRawUrl.Split('/');
  if (Parameters.Length >= 2)
  {
   string name = Parameters[0];
   string surname = Parameters[1];
   string res = string.Format("Welcome {0} {1}", name, surname);
   JavaScriptSerializer jc = new JavaScriptSerializer();
   StringBuilder sb=new StringBuilder ();
   jc.Serialize(res, sb);
   Response.Write(sb.ToString());
   Response.ContentType = "application/json";
  }
}

如何使用http处理程序创建基于json,xml,纯文本(GET,Post)的休息服务以及如何从jquery,asp.net,javascript调用它们请参见下文:

Creating Rest Services in asp.net with httphandler

答案 1 :(得分:-1)

您可能需要查看.Net Web API