【问题标题】:Implement restful url in .net where service is implemented using IHTTPHandler在使用 IHTTPHandler 实现服务的 .net 中实现 restful url
【发布时间】:2011-01-18 15:10:12
【问题描述】:

我想在 ASP.NET 中实现一个安静的服务。我希望它与 .Net 2.0 和 IIS 5+ 兼容。我被限制不使用 ASP.NET MVC 或 REST 入门工具包。通过在互联网上阅读,我了解到它可以使用 HTTPHandlers 来实现。问题是,请求将作为 POST 请求进来。我希望 URL 是这样的:

http://abc.com/MyService/MyMethod1/http://abc.com/MyService/MyMethod2/

有什么解决方法吗?

谢谢, 瓦米普

【问题讨论】:

标签: c# asp.net iis httphandler restful-url


【解决方案1】:

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

方法 1 - ISAPI 过滤器

这些是允许您操纵传入请求的低级模块。对其中之一进行编程非常麻烦且难以调试。如果你走这条路,你最好使用像ISAPI_Rewrite这样已经建好的。

方法二 - IHttpModule

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

  1. 打开 IIS 并导航到“主目录选项卡”
  2. 选择“配置”
  3. 点击“添加”,在“可执行文件”框中输入“C:\WINNT\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”。对于文件扩展名,输入“.*”。最后,确保未选中“检查文件是否存在”。

需要注意的一个有趣的事情是 ASP.Net 本身就是一个 ISAPI 模块 :)

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

【讨论】:

  • 我们可以使用安装程序来做到这一点吗?我必须使用安装程序在多个位置部署它。他们中的许多人已经在 IIS 上托管了一些应用程序或网站。那么将所有请求路由到 ASP.NET 是否安全?非常感谢大家的回复。
  • 我相信可以使用 WHS (technet.microsoft.com/en-us/library/bb727082.aspx) 在 IIS 上进行一些自动化操作。不幸的是,这超出了我的知识范围。至于将 ASP.Net 映射到所有传入请求,我几乎可以肯定您可以逐个站点地执行此操作。因此,如果您在配置了多个网站的客户端上进行安装,您只需为您的网站执行此操作。
  • 太好了。您能否帮助我获得有关如何将 ASP.NET 逐个站点映射到所有传入请求的更多信息?如果可以的话,那我就差不多完成了。
  • 感谢@dana,我忽略了通过 ASP.NET 路由所有请求的选项,认为它将适用于 IIS 上托管的所有站点。由于可以逐个站点进行此配置,因此我的问题解决了。
  • @vamyip - 很高兴你弄明白了,祝你好运,IIS5 自动化。就像我说的,这是我以前从未做过的事情,但使用 windows 脚本看起来是可能的。
【解决方案2】:

如果您可以只允许 IIS 7.0 及更高版本的限制,您可以使用 URL Rewrite http://www.iis.net/download/URLRewrite 很容易地做到这一点。

请问您为什么需要支持 IIS 5+?这是一项已有 11 年历史的技术,希望人们会离开这些平台,转而使用更新的版本。另请注意,对其中一些平台的支持即将结束。

如果关注的是运行 Windows XP 的开发人员,我会指出 IIS Express 包含 7.5+ 版本的功能,并且适用于 Windows XP 及更高版本的所有平台。

【讨论】:

  • 我的观点和你一样,但是,我无法控制需求:(。所以必须找到解决方法。
【解决方案3】:

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

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

您应该从一个简单的处理程序开始,例如 this one。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2012-07-16
    • 2017-03-21
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多