C# 在.net中实现restful url,其中服务是使用IHTTPHandler实现的

C# 在.net中实现restful url,其中服务是使用IHTTPHandler实现的,c#,asp.net,iis,httphandler,restful-url,C#,Asp.net,Iis,Httphandler,Restful Url,我想在ASP.NET中实现restful服务。我希望它与.Net 2.0和IIS 5+兼容。我被迫不使用ASP.NET MVC或REST初学者工具包。通过在internet上阅读,我了解到它可以使用HttpHandler实现。问题是,请求将作为POST请求传入。我希望URL是这样的: 和 有什么解决办法吗 谢谢, Vamyip我认为这将很难做到,因为如果没有IIS中的一些额外配置,IIS 5将不允许您处理非ASP.NET文件扩展名。这意味着您仅限于以.aspx等结尾的URL。要处理示例中的U

我想在ASP.NET中实现restful服务。我希望它与.Net 2.0和IIS 5+兼容。我被迫不使用ASP.NET MVC或REST初学者工具包。通过在internet上阅读,我了解到它可以使用HttpHandler实现。问题是,请求将作为POST请求传入。我希望URL是这样的:

有什么解决办法吗

谢谢,
Vamyip

我认为这将很难做到,因为如果没有IIS中的一些额外配置,IIS 5将不允许您处理非ASP.NET文件扩展名。这意味着您仅限于以.aspx等结尾的URL。要处理示例中的URL,您需要映射ASP.NET以处理IIS中的所有URL,实现某种类型的URL重写,或引入某种黑客404重定向

一旦有了正确的映射,您就可以连接一个IHttpHandler,但是您必须自己解析传入的请求,以确定哪个是/MyService/MyMethod1/,哪个是/MyService/MyMethod2/。如果您的方法很简单,那么使用正则表达式很容易做到这一点


您应该从一个简单的处理程序开始。

如果您只允许IIS 7.0及更高版本的限制,那么您可以使用URL重写非常容易地做到这一点

我可以问一下为什么您需要支持IIS 5+?这是一项已有11年历史的技术,希望人们会离开这些平台,转而使用更新的版本。还要记住,对其中一些平台的支持很快就要结束了


如果问题是运行Windows XP的开发人员,我想指出IIS Express包含7.5+版功能,适用于所有Windows XP及以上平台。

您最好的选择是使用URL重写。这在IIS5中是非常重要的。我知道的方法如下:

方法1-ISAPI过滤器

这些是允许您操作传入请求的低级模块。对其中一个进行编程很麻烦,而且很难调试。如果你走这条路,你最好使用一个已经建成的像

方法2-IHTTP模块

这些是易于从应用程序中添加/删除的托管ASP.Net模块。同样,您最好使用像这样的预构建组件。使用其中一个的问题(正如聪明地提到的)是,您必须将IIS 5配置为将所有传入请求映射到ASP.Net,如下所示():

  • 打开IIS并导航到“主目录选项卡”
  • 选择“配置”
  • 单击“添加”,并在可执行文件框中输入“C:\WINNT\Microsoft.NET\Framework\v2.0.50727\aspnet\u isapi.dll”。对于文件扩展名,输入“.*”。最后,确保未选中“检查文件是否存在”
  • 需要注意的一件有趣的事情是,ASP.Net本身就是一个ISAPI模块:)


    一旦您能够使用这些工具之一操作URL,就可以轻松地重写RESTful URL,由default.aspx页面(或您选择使用的任何处理程序)处理。

    以下格式的URL可以接受吗?还有?@dana我已经这样做了,加入了一个默认页面,这样URL就会是abc.com/default.aspx/MyMethod1。我想要的是一个更优雅的解决方案,使URL完全像REST一样。我和你的观点相同,但我不能控制需求:(.因此,我们必须找到一个解决方法。我们可以使用安装程序进行此操作吗?我必须使用安装程序在多个位置部署此操作。其中许多应用程序或网站已托管在IIS上。因此,将所有请求路由到ASP.NET是否安全?非常感谢大家的响应。我相信可以进行一些自动化操作在IIS上使用WHS()。不幸的是,这超出了我的知识范围。至于将ASP.Net映射到所有传入请求,我几乎可以肯定您可以逐个站点执行此操作。因此,如果您安装在配置了多个网站的客户端,您只希望为您的站点执行此操作。太好了。您能帮助我获得有关如何执行此操作的更多信息吗将ASP.NET映射到每个站点上的所有传入请求?如果可能的话,那么我就差不多完成了。感谢@dana,我忽略了通过ASP.NET路由所有请求的选项,认为这将适用于IIS上托管的所有站点。由于可以逐站点进行此配置,我的问题得到了解决。@vamyip-glay你把事情弄明白了,祝你好运,IIS5自动化。就像我说的,这是我以前从未做过的事情,但使用windows脚本看起来是可能的。