0

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

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

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

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

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

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

  1. 实现了一个继承 IHTTPHandler 接口的类(该类在 App_Code 文件夹中)。
  2. 配置了 Web.Config:system.webServer 模块 runAllManagedModulesForAllRequests="true" handlers add name="SeviceHandler" verb=" " path=" /services/*" type="MyWeb.UI.ServiceHandler, MyWeb.UI" resourceType ="未指定的“处理程序 system.webServer

我很感激这里的一些帮助。这让我发疯了。

4

2 回答 2

1

在 .Net 中,微软在 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)的 rest 服务以及如何从 jquery、asp.net、javascript 调用它们,请参见下文:

使用 httphandler 在 asp.net 中创建 Rest 服务

于 2013-06-04T07:51:58.887 回答
-1

您可能想查看.Net Web API

于 2012-04-19T02:49:01.067 回答