【问题标题】:Why does the StaticFile handler kick in when I rewrite a URL to my WCF service?为什么当我重写 WCF 服务的 URL 时,StaticFile 处理程序会启动?
【发布时间】:2013-07-29 14:19:57
【问题描述】:

我正在使用IHttpModule 重写其下托管的 WCF 服务的 URL。在 IIS 中,这看起来像:

重写模块位于 root 应用程序中。它接受如下 URL:

(1)http://host.com/root/r/users/user.1

并将其重写为:

(2)http://host.com/root/rest/users/user.1

然后将请求“转发”到 rest WCF 服务。问题是,rest 应用程序最终使用 StaticFile 处理程序处理 user.1,我得到了 404。但是,如果我只是访问 URL (2) 直接而不是通过重写模块,它工作正常!

如果写入的 URL 不包含扩展名,则通过重写模块可以正常工作:

(3)http://host.com/root/rest/users/all

为什么当我重写 URL 时,StaticFile 处理程序启动,我该如何停止它?

【问题讨论】:

    标签: asp.net .net wcf url-rewriting httpmodule


    【解决方案1】:

    首先,您是否尝试过使用 IIS 7 的内置重写模块?

    IIS7 Url Rewrite

    您的问题在“转发”两边加上引号,因此您可能有 Microsoft 提供的模块无法处理的特殊需求。如果是这样,请忽略该建议。

    其次,您应该考虑在根应用程序和虚拟目录中查看 IIS 的 Handler-Mappings 部分。这是 technet 上的冗长链接,但如果您更喜欢该路由,也可以在 web.config 中设置处理程序映射:

    Handler mappings in IIS

    IIS 7 and web.config mappings instructions

    【讨论】:

    • 是的,IIS 重写提供程序do not offer access to the request body,因此对我不起作用。回复:处理程序,是的,我可以将 path="*.*" type="System.Web.Handlers.TransferRequestHandler" 添加到我的 rest 应用程序中,并且 URL (2) 将起作用。我更想知道为什么 only 在重写情况下是必要的,以及是否有办法避免添加它。
    • 也许这是Server.Transfer 的未记录或记录不充分的行为,或者您使用什么方法在根应用程序和虚拟目录应用程序之间移动请求?这是一个实验,尝试将处理程序添加到您的根应用程序中,看看是否可以为虚拟休息应用程序修复它。如果是这样,那么您知道您的 IHttpModule 正在使用您的根应用程序的处理程序映射。
    猜你喜欢
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多