我已经构建了一个自定义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;方式。
如何让它发挥作用?
答案 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");