我有一个正确实现IHttpHandler的自定义HTTP处理程序。以下是我在webConfig中配置的内容。如果我理解正确,这个块应该捕获任何带有.test作为扩展名的请求。
<handlers>
<add name="SampleHandler" verb="*" path="*.test"
type="TestApp.App_Start.CustomHandler, TestApp" />
</handlers>
但是,唯一一次调用此处理程序的时候是我将路径深度为3应用于请求URL。所有其他请求将为404。
例如,当路径为:
时,处理程序正常工作localhost:XXX\some\fake\path\file.test
但不是为了:
localhost:XXX\some\file.test
我正在使用ASP.NET MVC 5,并怀疑它与路由有关。我也在使用VS2013中提供的示例项目,所以除了添加到项目中的处理程序之外,我还没有做其他任何事情。
更新
我已确定默认路线正在干扰。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
即使配置了这条路线,还有办法让它工作吗?
答案 0 :(得分:1)
看起来路由正在干扰处理程序。为了允许处理程序接收请求,我需要针对当前RouteCollection调用IgnoreRoute方法,忽略其中包含.test的任何路由:
在RouteConfig类中
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.test/");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
现在有效。有更好的方法吗?
答案 1 :(得分:0)
我认为没有调用HTTP Handler的原因是因为您在IIS 6的Web应用程序中注册。对于IIS 7及更高版本,请执行以下操作:
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="SampleHandler"
type="TestApp.App_Start.CustomHandler, TestApp" />
</httpHandlers>
</system.web>
</configuration>