【发布时间】:2013-09-01 15:18:46
【问题描述】:
我有一个实现IHttpHandler 和IRouteHandler 的类:
public class CustomHandler : IHttpHandler,IRouteHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
context.Response.AddHeader("Content-Type", "text/plain");
context.Response.Write("Hello World");
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
}
在 Application_Start 方法中,我尝试使用路由注册我的处理程序:
Route route = new Route("dav/{*Pathinfo}", new CustomHandler());
RouteTable.Routes.Add(route);
在我用这种 URL 调用之前,一切都很酷:
- http://localhost:63428/dav/asdadsa
- http://localhost:63428/dav/asdadsa/asdasd
- http://localhost:63428/dav/asdadsa/a%20%20sdasd(网址中有空格)
但是,如果我尝试使用这些:
- http://localhost:63428/dav/asdadsa.docx
- http://localhost:63428/dav/asdads/a.docx
我的处理程序未调用,服务器返回 404。我认为通配符将匹配每个以 dav/ 开头的 url。
知道如何使带有扩展名的网址也与我的路线匹配吗?
更新:
我找到了这个page。
它是从配置中设置的,而不是从后面的代码中设置的,但不必设置 runAllManagedModulesForAllRequests 设置,不幸的是,在我的原始示例中,路由值没有那么干净。
如果来这个问题寻求答案,也许有人会感兴趣。
【问题讨论】:
-
不幸的是,该链接不能回答我的问题。第一种方法我想在 dav 段(解析和处理)之后处理整个 url。只有当我的网址末尾有扩展名时,我的 rount 才有效。