使用默认处理程序通过 .NET 实现 REST

发布于 2024-12-22 03:30:49 字数 257 浏览 0 评论 0原文

我正在使用 .NET 创建 REST 服务,并使用通用处理程序 Default.ashx 来处理传入请求。这允许我使用“http://rest/test”之类的方法访问服务,不会出现问题。但是,当添加文件扩展名时,IIS 不再重定向请求,而是查找文件。如何修改 web.config 以便像“http://foo/test.xml”和“http://foo/test.json”这样的 URL 请求也由 DefaultHandler.ashx 处理?我以前做过这个,所以知道它是可能的,但不记得配置。

I am creating a REST service using .NET and have used a generic handler, Default.ashx, to handle the incoming request. This allows me to access the service using methods like "http://rest/test" without issue. But when a file extension is added IIS no longer redirects the request but instead looks for a file. How can the web.config be modified so that URL request like "http://foo/test.xml" and "http://foo/test.json" are also handled by the DefaultHandler.ashx? I have done this before so know its possible but cannot remember the configuration.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

三寸金莲 2024-12-29 03:30:49

您可以在我的 HttpClone 应用的 web.config 中查看相关示例。它的要点涉及删除您不想要的扩展的处理程序,如下所示:

<system.webServer>
...
<handlers accessPolicy="Read, Script">
  <clear />
  <add name="Favorite-Icon" path="/favicon.ico" verb="GET,HEAD" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
  <add name="HttpClone" path="*" verb="GET,HEAD,POST,DEBUG" type="Namespace.MyCustomHandler, AssemblyName" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
</handlers>

这表示对除“/favicon.ico”之外的所有 URI 的所有请求使用自定义处理程序。如果您仍然需要使用“Default.ashx”,那么您将需要获取 ashx 类型的处理程序并将其映射到处理所有路径,就像这样。一般来说,虽然不需要 ashx 扩展处理程序,但只需实现 IHttpHandler 在任何程序集中并在上面的“type”属性中引用它。

请注意,cassini Web 服务器(VStudio 中的测试服务器)不会将默认目录“/”映射到您的处理程序。要修复 cassini 的此问题,您需要存在一个 default.aspx 文档(尽管它可以为空)。

注 2 - 上面的配置仅适用于集成模式,对于经典模式,概念是相同的,但设置位于不同的位置。

You can see an example of this in my HttpClone app's web.config. The gist of it involves removing handlers for the extensions you don't want like this:

<system.webServer>
...
<handlers accessPolicy="Read, Script">
  <clear />
  <add name="Favorite-Icon" path="/favicon.ico" verb="GET,HEAD" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
  <add name="HttpClone" path="*" verb="GET,HEAD,POST,DEBUG" type="Namespace.MyCustomHandler, AssemblyName" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
</handlers>

This says to use a custom handler for all requests for all URIs except '/favicon.ico'. If you still need to use the 'Default.ashx' then you will need to get handler for the ashx type and map it to handle all paths just like this. Generally though there is no need for the ashx extension handler, just implement IHttpHandler in any assembly and reference it in the 'type' attribute above.

Note that the cassini web server (the test server in VStudio) will not map the default directory '/' to you're handler. To fix this for cassini you need a default.aspx document to exist (although it can be empty).

Note 2 - The configuration above is for integrated mode only, for classic mode the concept is the same but the settings are in a different location.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文