HttpHandler被忽视了,有利于路线

时间:2014-01-17 17:10:38

标签: c# asp.net asp.net-web-api httphandler asp.net-web-api-routing

我已经构建了一个自定义HttpHandler,只要负载均衡器请求特定资源,就会发出状态页。

更多背景:它不能成为控制器,因为我需要能够与其他程序集共享它,公司编码策略不允许来自其他程序集的控制器。 另外,我不能使用委托处理程序,因为我不想通过添加全局消息处理程序来影响管道。

所以我在web.config中有以下内容:

<system.web>
...
    <httpHandlers>
        <!-- Status Page-->
        <add verb="GET" path="*" type="Web.Api.Framework.StatusPageHandler, Web.Api.Framework" />
    </httpHandlers>
...
</system.web>
<system.webServer>
...
    <handlers>
        <clear/>
        <add name="StatusPageHandler" path="*" verb="GET" type="Web.Api.Framework.StatusPageHandler, Web.Api.Framework" />
    </handlers>
...
</system.webServer>

当我尝试访问处理程序(http://foo.bar/status)时,它失败了404.如果我删除默认控制器的资源映射(来自global.asax),那么它可以工作。即,在global.asax中没有以下语句,它可以工作:

routes.MapRoute("Default", "{controller}", null, null);

我偶然发现了一个可行的网址:http://foo.bar/status/XXX,但这并不理想 - 我们不想在那个&#34;丑陋&#34;方式。

如何让它发挥作用?

1 个答案:

答案 0 :(得分:2)

让它发挥作用的一种方法。像这样改变Web.Config。

<add name="StatusPageHandler" path="status" verb="GET" 
     type="Web.Api.Framework.StatusPageHandler, Web.Api.Framework" />

在Global.asax(RouteConfig.cs?)中添加该行以忽略此路由。请务必在routes.MapRoute之前添加此行。

routes.IgnoreRoute("status");